【发布时间】:2013-10-01 08:57:51
【问题描述】:
考虑以下代码:
MyClass myClass= new MyExtendedClass();
myClass.method();
其中 MyExtendedClass 是 MyClass 的子类型。正如我在第二个字符串编译器上的编译状态编译器上所理解的那样,在MyClass 的源代码中检查了存在方法method()。是正确的推理吗?现在考虑
List<Integer> ints= new ArrayList<Integer>();
ints.add(2);
List<? extends Integer> lst = ints;
lst.get(0);
在哪里可以看到List<? extends Integer> 的来源?
现在考虑:
new ArrayList<Integer>().getClass().equals(
new ArrayList<String>().getClass());// return true.
所以
在运行时类ArrayList<Integer> 和ArrayList<String> 是相等的,但在编译状态它不是真的。为什么? ArrayList<String>和ArrayList<Integer>的来源在哪里?
【问题讨论】:
-
我不明白你的问题。
-
我想知道,当我们在代码中调用方法时,编译器在做什么?考虑
List<? extends Integer> lst = ints; lst.get(0);。当我们调用get(int)时,编译器在做什么? -
在哪里可以看到
List<? extends Integer>的来源?你可以在这里看到它的javadoc:java.util.List。
标签: java generics arraylist wildcard