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