【发布时间】:2012-08-26 04:03:08
【问题描述】:
public class POJO<T> {
private List<Integer> integer = new ArrayList<Integer>();
public POJO() {
integer.add(1);
integer.add(2);
}
public List<Integer> getInteger() {
return integer;
}
public static void main(String[] args) {
POJO pojo = new POJO();
List<String> integer = pojo.getInteger(); // No compile error?
System.out.println(integer); // prints [1, 2]
}
}
如何编译以下行:
List<String> integer = pojo.getInteger();
如果getInteger() 输入如下
public List<Integer> getInteger()
【问题讨论】:
-
你的类声明没有意义:
POJO<DateOrString extends Date & CharSequence>---这将类型参数限制为 bothDate和CharSequence的子类型,但来自其名称看来您期望它会允许两者中的 any。 -
@MarkoTopolnik 如果 POJO 在没有泛型的情况下实例化,它可以工作。
-
@assylias 怎么会?在这种情况下,它会忽略 any 泛型类型信息,甚至那些与类的类型参数无关的信息?奇怪。
-
@assylias 检查了它,只是发出警告。不知道那件事。如果它是静态方法,那么它会发出错误。这不愧是Java Puzzler。
-
@MarkoTopolnik - 他们可能会写一整本书的仿制药难题:-(
标签: java oop generics types type-safety