Tôi đang sử dụng Java 1.8.0_151 và có một số mã mà không biên dịch và tôi không hiểu:Java8 generic đố
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
lý do tại sao nó hoạt động tốt trên result1
nhưng cho lỗi biên dịch trên result3
?
Thông tin thêm:
- Trong dòng đầu tiên, khi tôi thay đổi
Optional
-Optional<String>
, result3 cũng có thể biên dịch - Khi tôi phá vỡ
result3
thành 2 dòng: nhưresult1
vàresult2
,result3
có khả năng biên dịch
Bản sao có thể có của [Loại thô là gì và tại sao chúng ta không nên sử dụng?] (Https://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt -we-use-it) – Andrew
@AndrewTobilko có thể là OP đã làm * với mục đích * – Eugene