我不明白编译器如何处理以下代码,因为它在我期待错误时输出测试。
List<Integer> b = new ArrayList<Integer>();
List a = b;
a.add("test");
System.out.println(b.get(0));
我希望有人能告诉我编译器在执行代码时所经历的确切步骤,以便我能够理解输出。我目前的理解是:
编译器会在编译时检查支持参数类型的 add 方法是否存在于以add(Object e)作为其原始类型的List类中。
但是,在运行时,它尝试从实际对象List<Integer>调用 add(Object e) ,它不包含此方法,因为实际对象不是原始类型的,而是包含方法add(Integer e)。
如果在实际对象List<Integer> 中没有 add(Object e) 方法,它如何仍然以某种方式将字符串添加到整数列表中?
哔哔one
拉丁的传说
相关分类