238. Do not use Optional in setter args

The do not use category continues with a very tempting scenario that consists of using Optional in setter arguments. The following code should be avoided since it adds extra boilerplate code and violates the Do not use Optional for fields section (check the setIsbn() method):

// Avoid
public class Book {

private Optional<String> isbn;

public Optional<String> getIsbn() {
return isbn;
}

public void setIsbn(Optional<String> isbn) {
if (isbn == null) {
this.isbn = Optional.empty();
} else {
this.isbn = isbn;
}

// or
this.isbn = Objects.requireNonNullElse(isbn, Optional.empty());
}
}

We can fix this code by removing Optional from the fields and from the setters' arguments as follows:

// Prefer
public class Book {

private String isbn;

public Optional<String> getIsbn() {
return Optional.ofNullable(isbn);
}

public void setIsbn(String isbn) {
this.isbn = isbn;
}
}
Commonly, this bad practice is used in JPA entities for persistent properties (to map an entity attribute as Optional). However, using Optional in domain model entities is possible.
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset