黑马程序员技术交流社区

标题: 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对象
  1. public static void main(String[] args)throws Exception{
  2.                 //方法1
  3.                 Constructor<?> constructor1 =Class.forName("java.lang.String").getConstructor(String.class);
  4.                 String str1 =(String) constructor1.newInstance("abc");
  5.                 //方法2
  6.                 Constructor<String> constructor2 = String.class.getConstructor(String.class);
  7.                
  8.                 String str2 =constructor2.newInstance("abc");
  9.                
  10.                 System.out.println(str1);
  11.                 System.out.println(str2);
  12.         }

  13. }
复制代码
方法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