gpt4 book ai didi

Java8 泛型拼图

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:37 25 4
gpt4 key购买 nike

我使用的是 Java 1.8.0_151,有些代码无法编译,我不明白:

Optional optional = Optional.of("dummy"); 
Optional<Boolean> result1 = optional.map(obj -> true); // works fine
boolean result2 = result1.orElse(false); // works fine
boolean result3 = optional.map(obj -> true).orElse(false); // compilation error: Incompatible types: required boolean, found object
Object result4 = optional.map(obj -> true).orElse(false); // works fine

为什么它在 result1 上运行良好但在 result3 上给出了编译错误?
附加信息:

  • 在第一行,当我更改 Optional 时至 Optional<String> , result3也能编译
  • 当我打破result3分成两行:像result1result2 , result3能够编译

最佳答案

一旦你失去了类型安全——链式调用也会失去它。即Optional<Object> != Optional .所以当你这样做的时候

 Optional optional = Optional.of("dummy");
optional.map()

map只能接受原始 Function没有别的,这将返回 Object显然。

正确的做法是添加类型信息:

Optional<String> optional = Optional.of("dummy");

或者你可以不安全地转换:

boolean result3 = (boolean) optional.map(obj -> true).orElse(false)

关于Java8 泛型拼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47392547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com