使用泛型时,List如何在内部检查方法调用的类型?

use*_*316 2 java generics

鉴于此List<Employee>:

List <Employee> empList=new ArrayList<Employee>();
Run Code Online (Sandbox Code Playgroud)

当我试图添加一个Student:

l.add(0,new Student(1,2,3));
Run Code Online (Sandbox Code Playgroud)

列表如何解决这个并给我编译错误?

Joa*_*uer 5

实际上它不是特定的List检查,它是编译器(正如你所暗示的那样).

List简单地提供两条信息:

如果你构建了一个,List<Employee>那么编译器知道你不能add除了之外的任何东西调用,并且Employee如果你尝试的话会给编译器错误.

还应该注意的是,运行时没有这样的检查!因此,如果你以某种方式设法"偷偷摸摸"编译器所做的检查(例如使用原始类型),那么你可以对你做各种错误的事情,List运行时将无法检测到问题(直到你尝试以非通用方式访问"错误"类型).