2017-10-06 3 views
2

J'essaie d'écrire le code suivant où C est une classe enfant de B. Et la méthode getValue n'est disponible que dans C, pas dans B. Mais Eclipse montre une erreur dans cette déclaration:Facultatif Carte typecasting à l'objet de classe enfant

Optional.ofNullable(A).map(A::getB).map(C::getValue); 

Si c'est le cas normal, nous tapera acteurs et écrire comme ((C)a.getB()).getValue(). Comment est-ce que j'écris même en termes de Optional?

Répondre

6

Vous pouvez ajouter map(C.class::cast) dans votre chaîne.

Optional.ofNullable(aOrNull).map(A::getB).map(C.class::cast).map(C::getValue); 

Vous pouvez également combiner une partie de votre chaîne de cartes.

Si getB() ne retourne jamais nulle, vous pourriez avoir:

Optional.ofNullable(aOrNull).map(a -> ((C) a.getB()).getValue()); 

Pour conserver le comportement d'évitement nul des Optional si getB() rendements nuls, vous pourriez avoir:

Optional.ofNullable(aOrNull).map(A::getB).map(b -> ((C) b).getValue()); 
+0

je devais faire la carte (C.class :: cast) – Sandeep