黑马程序员技术交流社区
标题:
java泛型中<?>和<T>有什么区别?
[打印本页]
作者:
苏格拉底的弟子
时间:
2012-1-30 10:04
标题:
java泛型中<?>和<T>有什么区别?
本帖最后由 苏格拉底的弟子 于 2012-1-30 22:46 编辑
java泛型中<?>和<T>有什么区别?
作者:
李晓军
时间:
2012-1-30 10:22
使用<T>来声明类型持有者名称,自定义泛型类时,类持有者名称可以使用T(Type),如果是容器的元素可以使用E(Element),若键值匹配可以用K(Key)和V(Value)等,若是<?>,则是默认是允许Object及其下的子类,也就是java的所有对象了。
作者:
杨扬
时间:
2012-1-30 10:27
?是通配符..接收的是未知类型,,
T是指定的类型..
作者:
陈时峰
时间:
2012-1-30 11:27
<?>可以接受的是未知的类型
<T>接受的是制定的类型,看了下面一段代码就会明白的
利用反射中的Constructor类获取一个String对象
public static void main(String[] args)throws Exception{
//方法1
Constructor<?> constructor1 =Class.forName("java.lang.String").getConstructor(String.class);
String str1 =(String) constructor1.newInstance("abc");
//方法2
Constructor<String> constructor2 = String.class.getConstructor(String.class);
String str2 =constructor2.newInstance("abc");
System.out.println(str1);
System.out.println(str2);
}
}
复制代码
方法1中就是用的通配符<?>
方法2中Constructor类中是具体String类
若是方法1中是Constructor<String> constructor1 =Class.forName("java.lang.String").getConstructor(String.class);
则代码应该改成Constructor<String> constructor1 =(Constructor<String>)Class.forName("java.lang.String").getConstructor(String.class);
作者:
衣服
时间:
2012-1-30 14:31
?是一个通配符,T只是一个字符。
<? extends list <String> > 与 <T extends <List> > 在这儿不具有对比性。
?在这儿是指该函数可以接受List <?> 型参数,而T则指相应函数可以接受List类型或者其子类型的参数。
觉得就是 你不能把对象放进一个未知类型的集合中去。而T呢
英文版pdf下载链接:http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2