我有一段代码,其中一个接口有一个可选的返回方法和一些实现它的类来返回一些东西,其他的则没有。
为了拥抱这个出色的“空杀手”,我尝试了以下方法:
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>)
}}
我为这个例子多么愚蠢而道歉。
我怎样才能检查我刚刚得到的回报,只有在存在时才添加它,使用可选的?
PS 是否对 Optional 有任何真正的用处,这是 if(X != null) 无法做到的?