San*_*jiv -1 java generics collections
我是Java Generics的新手,我目前正在尝试使用Generic Coding ....最终目标是将旧的非通用遗留代码转换为通用代码...
我已经用IS-A定义了两个类,即一个是其他的子类.
public class Parent {
private String name;
public Parent(String name) {
super();
this.name = name;
}
}
public class Child extends Parent{
private String address;
public Child(String name, String address) {
super(name);
this.address = address;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试使用有界通配符创建一个列表.并得到编译器错误.
List<? extends Parent> myList = new ArrayList<Child>();
myList.add(new Parent("name")); // compiler-error
myList.add(new Child("name", "address")); // compiler-error
myList.add(new Child("name", "address")); // compiler-error
Run Code Online (Sandbox Code Playgroud)
有点困惑.请帮我解决这个错误吗?
那是因为你创造了 ArrayList<Child>
要实现相同的(即创建一个List可以包含所有子类的Parent),您可以简单地将其声明为List<Parent> myList = new ArrayList<Parent>();
List<Parent> myList = new ArrayList<Parent>(); --> new ArrayList should have generic type Parent
myList.add(new Parent("name")); // will work
myList.add(new Child("name", "address")); // will work
myList.add(new Child("name", "address")); // will work
Run Code Online (Sandbox Code Playgroud)
编辑:
为了回答你的另一个混乱,它是非法写入上限外卡类型,这里是一个线程解释它为什么.