我正在尝试编写以下代码,其中 C
是 B
的子类。 getValue 方法仅在C
中可用,在B
中不可用。但 Eclipse 在该语句中显示错误:
Optional.ofNullable(A).map(A::getB).map(C::getValue);
如果是正常情况,我们会输入cast并像((C)a.getB()).getValue()
这样写。我如何用 Optional
来编写相同的内容?
最佳答案
您可以将 map(C.class::cast)
添加到您的链中。
Optional.ofNullable(aOrNull).map(A::getB).map(C.class::cast).map(C::getValue);
您还可以组合一些 map 链。
如果 getB()
永远不会返回 null,您可以:
Optional.ofNullable(aOrNull).map(a -> ((C) a.getB()).getValue());
要在 getB()
返回 null 时保留 Optional
的避免 null 行为,您可以:
Optional.ofNullable(aOrNull).map(A::getB).map(b -> ((C) b).getValue());
关于java - 可选的映射类型转换为子类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46600591/