Java泛型在通配符上的插入

Java泛型在通配符上的插入,java,generics,wildcard,Java,Generics,Wildcard,Java不允许我在这个类中添加类型声明的子类 public class Exam<T> { public void set(Holder<? super T> hold){ } public T get(Holder<? extends T> holder){ return holder.get();} public static void main (String[] args){ Exam<

Java不允许我在这个类中添加类型声明的子类

public class Exam<T> {

    public  void set(Holder<? super T> hold){

    }
    public  T get(Holder<? extends T> holder){ return holder.get();}


    public static void main (String[] args){
        Exam<Question> eq = new Exam<Question>();
        eq.set(new Holder<Identification>());
    }
}
公开课考试{

公共空集(Holder这个错误对我来说是很自然的,
set
方法需要一个
Holder这个错误对我来说是很自然的,
set
方法需要一个
Holder
考试
需要一个
Holder
可以容纳T的任何子类。这就是
super
所做的你通过的是一个
持有者
,但是
识别
既不是
T
也不是它的超类。

考试
要求一个
持有者
可以持有T的任何子类。
超级
就是这样做的。你通过的是
持有者
,但
识别
两者都不是
T
也不是它的超类。

泛型是不变的。这可能是您的答案。不变意味着Type2是Type1的子类,所以它并不意味着List是List。

泛型是不变的。这可能是您的答案。不变意味着Type2是Type1的子类,所以它并不意味着List是List。

它如果你写的话,它会起作用(当然,它有不同的含义)

public  void set(Holder<? extends T> hold){ }
public void set(Holder如果您编写

public  void set(Holder<? extends T> hold){ }

public void set(Holder将类Enum的set方法更改为

public  void set(Holder<? extends T> hold){

}

public void set(Holder将类Enum的set方法更改为

public  void set(Holder<? extends T> hold){

}

公共无效集(Holder
Identification
Question
的子类,而您在
set
中声明它应该是一个超类。Identification是Question的子类,而不是一个超类。
Identification
Question
的子类,而您在
set
中声明它应该是一个超类。identificationcNation是问题的子类,而不是超类。我希望看到它会接受任何东西,只要它扩展了T,或者在这个扩展了问题的东西中,为什么不允许有Holder标识不是问题的子类?我补充了一点关于我如何看待
extends
super当我试图确定在何处使用哪个时。我希望看到它会接受任何东西,只要它扩展了T,或者在这个扩展了问题的任何东西中为什么不允许有Holder标识不是问题的子类?我补充了一点关于我如何看待
extends
super
当我试图确定使用where.where.it时,它与extends T?@user962206
Holder有什么区别?extends T?@user962206
Holder有什么区别
public  void set(Holder<? extends T> hold){ }
public  void set(Holder<? extends T> hold){

}