我有通用类:
public class Test<T> {
private Test<? extends T> myInstance;
public Test<? extends T> getInstance () {
return myInstance;
}
public void setInstance (Test<? extends T> argType) {
this.myInstance = argType;
}
}
我的班级关系中有两个班级:
public abstract class Alphabet {
//code here
}
和
public class A extends Alphabet{
public A() {
super();
System.out.print("This is A call");
}
}
最后,我有一个类,我想存储使用特定类型创建泛型类Test并设置新的对象实例 - &gt;通过setInstance()
方法:
public static void main(String[] args) {
List<Alphabet> list = new ArrayList<Alphabet>();
Test<Alphabet> tAlphabet = new Test<Alphabet>();
tAlphabet.setInstance(new A()); //Here is compilation ERROR
}
但是我在第tAlphabet.setInstance(new A());
行
我的通用类有什么问题?
答案 0 :(得分:1)
您的实例是当前编写的Test
对象,而您正在为其提供Alphabet
对象。您可能希望您的实例属于Alphabet
类型:
public class Test<T> {
private T myInstance;
public T getInstance() {
return myInstance;
}
public void setInstance(T argType) {
myInstance = argType;
}
}
这样,您的Test
存储Alphabet
而不是Test
。
答案 1 :(得分:1)
看来你做的事情比需要的更复杂。您可能希望在Test类中使用它而不是实际拥有的内容:
private T myInstance;
public T getInstance () {
return myInstance;
}
public void setInstance (T argType) {
this.myInstance = argType;
}
通过这种安排,您可以在setInstance(new A())
个实例上Test<Alphabet>
免费使用。