Używam Java 1.8.0_151 i tam jest jakiś kod, który nie sporządza i nie rozumiem:Java8 generic puzzle
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
dlaczego to działa dobrze na result1
ale daje błąd kompilacji na result3
?
Dodatkowe informacje:
- W pierwszej linii, kiedy zmienić
Optional
doOptional<String>
, result3 jest również w stanie skompilować - Kiedy złamię
result3
na 2 linie: jakresult1
iresult2
,result3
jest w stanie skompilować
Możliwy duplikat [Co to jest typ surowy i dlaczego nie powinniśmy go używać?] (Https://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt -we-use-it) – Andrew
@AndrewTobilko może być OP zrobił to * celowo * – Eugene