鉴于此List<Employee>
:
List <Employee> empList=new ArrayList<Employee>();
当我尝试添加Student
时:
l.add(0,new Student(1,2,3));
列表如何解决这个问题并给我编译错误?
最佳答案
其实它并不是特指List
进行检查的是编译器(正如您所暗示的那样)。
List
只需提供两条信息:
有一个类型
E
其中类型List
参数化:public interface List<E> extends Collection<E>
方法
add
接受E
类型的对象:boolean add(E e);
如果你构建一个List<Employee>
然后编译器知道你不能调用add
与任何除了和Employee
如果您尝试这样做,将会出现编译器错误。
还应该注意的是,在运行时没有这样的检查!因此,如果您以某种方式设法“潜行”编译器所做的检查(例如通过使用 a raw type ),那么您可以对 List
做各种错误的事情。并且运行时不会检测到问题(直到您尝试以非通用方式访问“错误”类型)。
关于java - 使用泛型时,List 内部如何检查方法调用的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12172564/