public class UseCase3 <T>{
public void doSomething(UseCase3<? extends List> a){
System.out.println(a.getClass().getName());
}
public void print(T t){
System.out.println(t.getClass().getName());
}
就算是不知道,它总是 List 的子类型,如果是返回值,一定可以赋值给声明为 List 的变量,一定具有 List 里面定义的方法。
--------------------编程问答--------------------
+1
--------------------编程问答--------------------
有点不懂,想问下6楼 (? extends List t)不是限定T只能是继承了List的类嘛。那为什么a.print(new ArrayList());这句也不正确呢
? extends List
的意思是“只有某一种List的子类型可以”,至于到底哪一种,不知道。
所以当你给出任何一种类型,即使是 List 的子类型,对于它到底是不是符合条件,答案是“不知道”。
“不知道” 的处理方式是 “不符合”。
+1
--------------------编程问答--------------------
有点不懂,想问下6楼 (? extends List t)不是限定T只能是继承了List的类嘛。那为什么a.print(new ArrayList());这句也不正确呢
? extends List
的意思是“只有某一种List的子类型可以”,至于到底哪一种,不知道。
所以当你给出任何一种类型,即使是 List 的子类型,对于它到底是不是符合条件,答案是“不知道”。
“不知道” 的处理方式是 “不符合”。
我再想想的
--------------------编程问答--------------------
每一个?都是单独,没有任何关联
你调用的时候,是引用不到定义时候的?的
要用extends就直接X extends List好了
方法的可以写成
public <X extends List> doSomething(UseCase3<X> a)