一、实现机制
java泛型实现方法为类型擦除,基于这种方法实现的泛型称为伪泛型。
java泛型只在源代码中存在,在编译后的文件中替换为原生类型,并插入强制转换。
(真正的泛型是应该存在于源码、编译后文件、运行期)
二、擦除实例
源码:
List
testList.add("abcd");
System.out.println(testList.get(0));
编译后:
List
testList.add("abcd");
System.out.println((String)testList.get(0));
三、重载实例(1)
源码:
private void overLordTest(List
System.out.println(list.size());
}
private void overLordTest(List
System.out.println(list.size());
}
不能通过编译,因为编译后参数类型是一样的。
四、重载实例(2)
源码:
private String overLordTest(List
return “overLordTest”;
}
private void overLordTest(List
System.out.println(list.size());
}
可以通过编译并正常运行(有警告),与java返回值 不参与重载冲突?【用sun JDK1.6编译】
Class文件格式中,只要描述符不是完全一致的两个方法就可以共存。
用JDK1.7/JDK1.8编译报错,是否能运行与调用其中几个方法有关。
五、思考
真正泛型会是什么样?与多态有什么区别和联系?