[英]Confusion with generics, java
我有通用类:
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的类,并通过setInstance()
方法设置setInstance()
> A的新实例:
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());
出现了编译错误tAlphabet.setInstance(new A());
我的通用类有什么问题?
您的实例是当前编写的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
。
看来您使事情变得比所需的更为复杂。 您可能希望在Test类中而不是实际使用它:
private T myInstance;
public T getInstance () {
return myInstance;
}
public void setInstance (T argType) {
this.myInstance = argType;
}
通过这种安排,您可以自由地在Test<Alphabet>
实例上设置setInstance(new A())
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.