Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

java-optional

Java Optional API - A Code kata

Java Duke Optional Logo

Table of Contents

Quite often, we have to test if a field or variable is null or has a value. Conditional checks in traditional java relied on an if condition. Failure to check and assumption of existence of a value can lead to the ever-so-popular NullPointerException.

Sir Charles Anthony Richard Hoare (Tony Hoare), creator of the null reference rued the creation of null in 2009:

I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.

Optional was added in Java 8 as a possible solution to errant null issues. An Optional wrapper over a field or variable ensures there is a check or a deliberate attempt to get an value from the wrapper. The kata will help us better understand the features of java.util.Optional

What is a Code-Kata

A code-kata is a coding exercise that builds muscle memory by a practice of programming to arrive at a known solution.

How does one go about with this code kata?

The essence of the exercise (presentation material and code kata) is to demonstrate the
usage patterns for dates and times.

This set of code katas rely on fixing broken tests. The tests may have multiple solutions, the intent is to learn and experiment.

The project contains several JUnit tests that fail as org.opentest4j.AssertionFailedError.

Here are simple steps to use this kata:

  1. Run the test class(es).
  2. One or more tests will fail with the test failure message.
  3. Fix the failing tests by taking hints from the TODOs.
  4. Repeat above steps until all tests pass.
  5. Check the solutions to see if there are other ways to solve. (Remember, the solution may be less performant than yours)
  6. Rinse and repeat (delete and checkout again, then back to Step 1) to build muscle memory.

Mission

Your mission, should you choose to accept it, will be to fix the JUnit tests. This message will self-destruct in NaN minutes

Requirements

How to prepare for coding along

This kata is developed as a Java maven project. Ensure that you have:

  1. Apache Maven 3.3.x or above. Tested with Apache Maven 3.5.0. Link: https://maven.apache.org/download.cgi

  2. JDK 11. Tested with OpenJDK 11 Link: http://jdk.java.net/11/

  3. Your favorite Java IDE. IntelliJ IDEA Ultimate was used to develop this kata.

Project Structure

The structure of the project:

|____pom.xml
|____README.md
|
|____src
| |
| |____test                    <------------------- Kata Tests
| | |____java
| |   |____none
| |     |____cvg
| |       |____optional
| |
| |____solutions               <------------------- Solutions 
| | |____java
| |   |____none
| |     |____cvg
| |       |____optional

Java Optional API

The JUnit tests listed below are setup to utilize the Java Optional API features.

Tests Included

Java Optional

  1. The tests in this class show creation of and fetching value from an Optional.

  2. The tests in this class show conditional checks and alternate actions when fetching values from an Optional.

  3. The tests in this class show the usage of Optional in Java Stream API.

Solutions

Solutions for each test:

Kata Test Solution
TestKata1OptionalCreationAndFetchingValues.java TestSolution1OptionalCreationAndFetchingValues.java
TestKata2OptionalConditionalFetching.java TestSolution2OptionalConditionalFetching.java
TestKata3StreamsAndOptionals.java TestSolution3StreamsAndOptionals.java

Take Away

The key take-away from this kata is a solid understanding of the Java Optional API.