繁体   English   中英

与泛型,Java的混淆

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM