给出以下Java代码:
import java.util.AbstractMap.SimpleEntry; import java.util.Arrays; import java.util.List; import java.util.Map.Entry; import java.util.Optional; public class Test { public static void main(String[] args) { SimpleEntrysimpleEntry = new SimpleEntry<>(1, "1"); Optional > optionalEntry = Optional.of(simpleEntry); Optional > optionalSimpleEntry = Optional.of(simpleEntry); List > list1 = Arrays.asList(simpleEntry); List >> list2 = Arrays.asList(optionalEntry); List >> list3 = Arrays.asList(optionalSimpleEntry); List >> list4 = Arrays.asList(optionalSimpleEntry); } }
表达式可以初始化list
,list2
并且list3
可以正常工作。但是,表达式初始化list4
在Eclipse中因以下错误而中断:
Type mismatch: cannot convert from List>> to List >>
和此错误javac
:
Test.java:16: error: incompatible types: inference variable T has incompatible bounds List>> list4 = Arrays.asList(optionalSimpleEntry); ^ equality constraints: Optional > lower bounds: Optional > where T is a type-variable: T extends Object declared in method asList(T...)
可AbstractMap.SimpleEntry
直接实施Map.Entry
。那么,为什么类型推断歇list4
时,它适合list1
于list3
(也为分配optionalEntry
,对于这个问题)?
特别是我不明白为什么对分配不起作用list1
时为什么对分配起作用list4
。