与泛型混淆,java

时间:2015-01-31 14:08:46

标签: java generics

我有通用类:

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());

中遇到了编译错误

我的通用类有什么问题?

2 个答案:

答案 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>免费使用。