Java 8'i 6 aydan daha uzun bir süredir kullandıktan sonra, yeni API değişikliklerinden oldukça memnunum. Hala emin olmadığım bir alan ne zaman kullanılacağıdır Optional
. Bir şey olabileceği her yerde kullanmak istemek arasında sallanıyorum null
ve hiçbir yerde.
Kullanabileceğim çok fazla durum var gibi görünüyor ve faydalar (okunabilirlik / boş güvenlik) eklediğinden veya yalnızca ek yüke neden olup olmadığından asla emin değilim.
Bu yüzden birkaç örneğim var ve topluluğun Optional
faydalı olup olmadığı konusundaki düşünceleriyle ilgileniyorum .
1 - Genel bir yöntem olarak, yöntemin geri dönebileceği tür null
:
public Optional<Foo> findFoo(String id);
2 - Param olabileceği zaman bir yöntem parametresi olarak null
:
public Foo doSomething(String id, Optional<Bar> barOptional);
3 - Fasulyenin isteğe bağlı bir üyesi olarak:
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
4 - Giriş Collections
:
Genel olarak düşünmüyorum:
List<Optional<Foo>>
bir şey ekler - özellikle değerlerin filter()
kaldırılması null
vb. için kullanılabilir, ancak Optional
koleksiyonlar için iyi bir kullanım alanı var mı?
Kaçırdığım vakalar var mı?
.filter(Optional::absent)
"boş değerler"
getOrDefault()
mu?
Map<Character, String>
. Hiçbir ikamesi varsa bunu kullanabilirsiniz:Optional.ofNullable(map.get(c)).orElse(String.valueOf(c))
. Ayrıca İsteğe bağlı Guava çalındı ve çok daha güzel bir sözdizimi olduğunu unutmayın:Optional.fromNullable(map.get(c)).or(String.valueOf(c));