java - 可选的映射类型转换为子类对象

标签 java java-8 option-type

我正在尝试编写以下代码,其中 CB 的子类。 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/

相关文章:

java - 无法读取 Selenium 中的属性文件(对象存储库)

java - 在 Java 8 中迭代流的最快方法是什么?

java - ResourceBundleControlProvider 在 Java 中实际上已被弃用吗?

java - 根据可选列表过滤列表

swift 可选(?)。两者有什么区别?

java - 如何在 Spring Boot 中正确指定数据库模式?

java - 我在更改日期格式时遇到问题

java - 即时型和日期型

java - Java 8 中 Map.Entry 的 Comparator.comparing

java - 使用 Mockito 返回 Java 8 可选对象的模拟对象返回空可选