可选地将类型转换映射到子类对象

时间:2017-10-06 07:34:50

标签: java java-8 optional

我正在尝试编写以下代码,其中CB的子类。并且getValue方法仅在C中可用,而不在B中。但Eclipse在此声明中显示错误:

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

如果是正常情况,我们会像((C)a.getB()).getValue()一样输入强制转换和写入。如何根据Optional编写相同的内容?

1 个答案:

答案 0 :(得分: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返回null,则保留getB()的空值避免行为,您可以:

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