【发布时间】:2013-09-21 17:52:57
【问题描述】:
这两个Lists有区别吗?
List<Something> a;
List<? extends Something> b;
例如我知道
List<Object> a;
List<?> b;
List c;
和
List<Something> a;
List<? extends SomeInterfaceSomethingImplements> b;
都是不同的,但是这些呢?如果将Something 替换为Object 会有什么不同吗?
List<Object> a;
List<? extends Object> b;
【问题讨论】:
-
将字段类型设为
List<Object>只允许您为其分配List<Object>。由于类型擦除,List<String>不被视为List<Object>。可以为声明为List<? extends Object>的引用分配属于Object的任意子类的元素列表(这适用于Java 中的所有类)。这可能意味着List<Object>、List<String>、List<Whatever> -
@Tom Right,但我很确定这不是因为类型擦除。
String和Object已经存在了,只是检查,与擦除类型无关。 -
我看不出这是怎么复制的。在另一个问题中,提问者正在比较
<Date>和<? extends Serializable>。在我的情况下,例如<Date>和<? extends Date>。