java中API有点不明白的地方 API中泛型有的是<T>有的是<?>这两者有什么区别吗~不都是任意类型的意思吗?求大神们解答!!!!!!!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 T是类型,?是泛指使用<T>来声明类型持有者名称,自定义泛型类时,类持有者名称可以使用T若是<?>,则是允许Object及其下的子类,也就是java的所有对象 <T>用来声明泛型,一般用在类,方法的声明中,指不确定的类型,比如:public class Generic <T> { ... } //这个Generic类中都可以使用Tpublic <T, K> void foo {} //foo方法中可以使用T和K<?>不能出现在上述声明中,<?>一般出现在方法的参数列表中,比如:public void doStuff(List<?> list) { ... } //指参数传入的List实例可以是任何泛型public void doStuff1(List<? extends Number> list) { ... } //指参数传入的List实例的泛型必须是Number类的子类(包括Number类)上述两种方式传入方法中的list,不可以修改,如调用list.add("abc"),编译会报错另外还有一种如:public void doStuff2(List<? super Integer> list) { ... } //指参数传入的List实例的泛型必须是Integer类的父类(包括Integer类),这种情况下允许用list.add()方法添加内容。<?>还可以用在实例化的时候,如:List<String> list = new ArrayList<? extends String>(); LS的解释很好T就是指定了是什么类型,就必须用什么类型?表示可以是任何类型 是不是声明集合的时候必须先确定其类型,而在下面的方法参数列表中可以使用<?> 我是这样认为的,<T>一般用在类里面,而?在声明出实例的时候,像多态那样用。例: public class Demo<T>{} Demo<?> d = new Demo(); 也可以用extends和super来限制使用泛型的范围 Demo<? extends List> = new Demo<ArrayList>(); Demo<? super ArrayList> = new Demo<List>(); 如何用java实现含有文字的模糊图片? 同学问怎么写junit Hibernate取Session需要用单例吗? java最大流问题 SWT tableEditor的问题 对getBytes的应用 如何在2个进程间传递Vector对象 eclipse在mdk9.2下的运行 请问怎么样输入1个1位字以上的数,和字符串,有没有现实此功能的函数? 我终于可以捐赠可用分了。javagirl_1:给你兑现! 新手百思不其解... 得到彼此位数上的数字不相同的三位数的所有组合
使用<T>来声明类型持有者名称,自定义泛型类时,类持有者名称可以使用T
若是<?>,则是允许Object及其下的子类,也就是java的所有对象
public class Generic <T> { ... } //这个Generic类中都可以使用T
public <T, K> void foo {} //foo方法中可以使用T和K
<?>不能出现在上述声明中,<?>一般出现在方法的参数列表中,比如:
public void doStuff(List<?> list) { ... } //指参数传入的List实例可以是任何泛型
public void doStuff1(List<? extends Number> list) { ... } //指参数传入的List实例的泛型必须是Number类的子类(包括Number类)
上述两种方式传入方法中的list,不可以修改,如调用list.add("abc"),编译会报错
另外还有一种如:
public void doStuff2(List<? super Integer> list) { ... } //指参数传入的List实例的泛型必须是Integer类的父类(包括Integer类),这种情况下允许用list.add()方法添加内容。<?>还可以用在实例化的时候,如:
List<String> list = new ArrayList<? extends String>();
T就是指定了是什么类型,就必须用什么类型
?表示可以是任何类型
例:
public class Demo<T>{}
Demo<?> d = new Demo();
也可以用extends和super来限制使用泛型的范围
Demo<? extends List> = new Demo<ArrayList>();
Demo<? super ArrayList> = new Demo<List>();