2017-10-06 68 views
2

我正在尝试编写以下代码,其中CB的子类。而getValue方法仅在C中可用,而不在B中。但是Eclipse是显示错误在此声明:可选映射类型转换为子类对象

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

如果是正常情况下,我们将强制类型转换,写像((C)a.getB()).getValue()。我如何根据Optional编写相同的?

回答

6

您可以将map(C.class::cast)添加到您的连锁店。

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

你也可以组合一些你的地图链。

如果getB()从未返回null,你可以只是:

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

要保留Optional如果getB()返回空的空回避行为,你可以有:

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

我不得不做地图(C.class :: cast) – Sandeep

相关问题