List<String> people = new ArrayList<>(25);
people.ensureCapacity(25); //ошибка компилятора
我不明白。是的,最初它只是一个没有这种方法的列表,但是我们创建了一个具有这种方法的arraylist类的新对象,这不应该吗?
如果我在某个地方错了,请纠正我
List<String> people = new ArrayList<>(25);
people.ensureCapacity(25); //ошибка компилятора
我不明白。是的,最初它只是一个没有这种方法的列表,但是我们创建了一个具有这种方法的arraylist类的新对象,这不应该吗?
如果我在某个地方错了,请纠正我
这个问题有2个方面:
1)在编译阶段,真正出现问题的地方,编译器只知道变量
people有类型List<String>,并试图找到一个ensureCapacity()自然不存在的方法并抛出错误。2)在运行时,JVM当然理解它
people实际上是一个类型的对象ArrayList<String>并且可以调用方法ensureCapacity(),但是Java语义是禁止这样做的,除非你对类型进行强制转换(类型转换)ArrayList<String>:或应用反射 (
java.reflection)