我正在尝试编写以下代码,其中C
是B
的子类。并且getValue方法仅在C
中可用,而不在B
中。但Eclipse在此声明中显示错误:
Optional.ofNullable(A).map(A::getB).map(C::getValue);
如果是正常情况,我们会像((C)a.getB()).getValue()
一样输入强制转换和写入。如何根据Optional
编写相同的内容?
答案 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());