Java 8 en option ajouter retour en résultat uniquement si option.isPresent

J'ai un morceau de code où une interface dispose d'une Option de retour de la méthode et certaines des classes qui l'implémentent retourner quelque chose, d'autres ne le font pas.

Dans un effort pour embrasser cette brillante "null killer", voici ce que j'ai essayé:

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>)
}}

Je prie de m'excuser pour la façon dont idiot cet exemple est.

Comment puis-je vérifier le retour, je viens de recevoir et d'ajouter que si présente, à l'aide facultative?

P. S. est-il un véritable intérêt à l'Option qui est if(X != null) ne pouvait pas le faire?

  • "P. S. est-il un véritable intérêt à l'Option qui est if(X != null) ne pouvait pas le faire?" - Je suis un grand fan de Facultatif, mais en même temps, je considère qu'il est presque une forme de commentaire. Lorsque vous voyez quelque chose de type Facultatif, vous devez savoir automatiquement qu'il pourrait ne pas être là; cependant, la plupart des valeurs que peut contenir la valeur null ne doit jamais, il n'est donc pas à la pratique générale de l'entourent absolument chaque de référence avec la valeur null contrôles.
  • Je ne veux pas faire cela dans une sorte de bain de sang, mais je suis d'accord avec ce gars ici: quel est le point? Je suis d'accord sur l'impression "Oh, une option! Mieux être sûr que, en effet, il existe", mais je pense qu'il aurait été possible de faire un peu mieux.
  • Donc, une partie de l'avantage que je vois est la clarté. Chaque fois que vous voyez Optional arriver attribué un null valeur, vous savez que c'est mal, et peut se sentir justifié dans la fixant. Quand vous voyez nulle arriver affecté à une autre valeur... eh bien, qui sait, peut-être que c'est approprié. J'ai aussi l'impression que, du point de vue philosophique, "Chose qui est peut-être rien" ne devrait vraiment être d'un type différent de celui de "Chose qui doit être quelque chose." Il pourrait être mieux fait, mais seulement si elle faisait partie de la langue à partir de la base... et, de l'OMI, Java est sur une partie de porc de trois pièces de rouge à lèvres.
InformationsquelleAutor Vale | 2016-06-15