黑马程序员技术交流社区

标题: 关于定义泛型类,泛型构造器的疑问! [打印本页]

作者: 折纸时代    时间: 2012-12-22 10:39
标题: 关于定义泛型类,泛型构造器的疑问!
本帖最后由 司懿卓 于 2012-12-23 15:09 编辑

代码部分:
  1. class MyClass<E>
  2. {
  3.         public <T> MyClass(T t)
  4.         {
  5.                 System.out.println("t的参数值为:" + t);
  6.         }
  7. }
  8. public class GenericDiamondTest
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 //MyClass类声明中的E形参是String类型
  13.                 //泛型构造器声明的T参数是Integer类型
  14.                 MyClass<String> mc1 = new MyClass<>(5);
  15.                 //显式指定泛型构造器中声明的T形参是Integer类型
  16.                 MyClass<String> mc2 = new <Integer> MyClass<String>(5);
  17.                 //MyClass类声明中的E形参是String类型
  18.                 //如果显式指定泛型构造器中声明的T参数是Integer类型
  19.                 //此时就不能使用"菱形"语法,下面代码错误
  20.                 //MyClass<String> mc3 = new <Integer> MyClass<>(5);
  21.         }
  22. }
复制代码
上面代码中 定义了泛型类,类型实参传入为String类型.
感觉没什么实际意义, 或者只是为了用泛型<String>来表示一个特殊的子类??
这样是否是只考虑用<String>来限定子类? 而和内部数据类型没有关系? (我感觉应该是这样的吧? )

作者: 折纸时代    时间: 2012-12-22 10:40
如果是的话,构造器的问题也就通了...  
作者: 董将    时间: 2012-12-22 10:48
个人感觉,泛型在集合里面,在添加特定的集合元素的时候,起的是一个类型限制的问题,比如我传进一个学生对象(姓名,年龄),在进行循环遍历的时候,就会省去强制转换这个步骤,输出的语句就是这个对象表示的了,省略了一个步骤
一下是个人总结
泛型是如何使用的呢?
通过泛型来定义集合对象
ArrayList<数据类型> array=new ArrayList<数据类型>();

就是在创建对象的时候,在对象的后面跟着的<>里面就爱如明确的类型。


一般,我们泛型就是在集合类中常用。

泛型的好处是什么?
1,解决了警告问题(类型不明确)
2,避免了在获取元素的时候的类型转换问题
3,把在运行时的问题提前到了编译期间解决。
4,优化了程序设计,不需要再进行强制转换。



String 没有泛型
其他的大部分都加

泛型定义在方法上的好处是什么?
传什么类型就打什么类型。
作者: 折纸时代    时间: 2012-12-23 09:13
董将 发表于 2012-12-22 10:48
个人感觉,泛型在集合里面,在添加特定的集合元素的时候,起的是一个类型限制的问题,比如我传进一个学生对 ...

虽然有点答非所问,但是还是学到了些.  谢谢啦.
如果要仔细想下,说的也对. 限制作用,用在定义类时,
其实一个特殊的子类,也算是对类的一种限定吧..
作者: filter    时间: 2012-12-23 15:29
3楼解释的很全面,个人感觉泛型用在方法和变量中更有用,大大提高了某一个方法的扩展性,API文档中的好多方法都含有泛型




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2