私は、インターフェイスにオプションのreturnメソッドがあり、何かを返すためにそれを実装するクラスのいくつかがありますが、それ以外のコードはありません。この華麗な「ヌルキラー」を採用する努力においてJava 8オプションadd.result.isPresentの場合にのみ返す戻り値
は、ここで私が試したものです:
public interface Gun {
public Optional<Bullet> shoot();
}
public class Pistol implements Gun{
@Override
public Optional<Bullet> shoot(){
return Optional.of(this.magazine.remove(0));
}//never mind the check of magazine content
}
public class Bow implements Gun{
@Override
public Optional<Bullet> shoot(){
quill--;
return Optional.empty();
}
}
public class BallisticGelPuddy{
private Gun[] guns = new Gun[]{new Pistol(),new Bow()};
private List<Bullet> bullets = new ArrayList<>();
public void collectBullets(){
//here is the problem
for(Gun gun : guns)
gun.shoot.ifPresent(bullets.add(<the return I got with the method>)
}}
私はこの例がどのように愚かなことをお詫び申し上げます。
私はちょうど持って帰って確認して、オプションの場合はそれを使用して追加することができますか?
P.S.任意の本当の有用性はありますか?(X!= null)はできませんでしたか?
"(X!= null)ができなかった場合、オプションには本当に便利ですか?"というメッセージが表示されます。 - 私はOptionalの巨大なファンですが、私はこれをほぼ一種のコメントとみなしています。オプションの型があるときは、そこにはないかもしれないことを自動的に*知る必要があります。しかし、* null *を保持することができるほとんどの値は決して*べきではありません。したがって、ヌルチェックですべての参照解除を絶対に囲むのではありません。 –
@EdwardPeters私は何らかの血行でこれを変えたくないが、私は[ここのこの人](http://huguesjohnson.com/programming/java/java8optional.html)に同意する。私は「ああ、オプションです!」という印象に同意します。確かにそれが存在することを確かめてください。しかし、少し上手くやったかもしれないと思います。 – Vale
私が見る利点の一部は明快です。 'Optional'が' null'値を割り当てられるのを見るたびに、あなたはそれが間違っていることを知っていて、それを修正することで正当だと感じるかもしれません。ヌルが別の値に割り当てられているのを見ると...よく、誰が知っているのでしょう、それはおそらく適切です。私はまた、哲学的には、「何もないかもしれないこと」は、「何かでなければならないもの」とは異なるタイプでなければならないと感じています。もっと上手くやることができましたが、それが基本的な言語の一部であった場合に限り、... IMO、Javaは口紅の3つの部分におよぶ1つの部分の豚です。 –