黑马程序员技术交流社区

标题: 关于方法上泛型的问题 [打印本页]

作者: 左建飞    时间: 2012-8-12 18:14
标题: 关于方法上泛型的问题
  1. public class GenericDemo
  2. {
  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args)
  7.         {
  8.                 Demo d=new Demo();
  9.                 d.show(2);
  10.                 d.show("hah");
  11.                 d.show('a');
  12.                 d.show(2.333);
  13.                
  14.         }
  15. }
  16. class Demo
  17. {
  18.         public <T> void show(T t)//public void show(Object obj){}
  19.         {
  20.                 System.out.println("show"+t);
  21.         }
  22.         public <Q> void print(Q q)
  23.         {
  24.                 System.out.println("print"+q);
  25.         }
  26. }
复制代码
泛型类定义的泛型,在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所要操作的类型就已经固定了。
为了让不同的方法可以操作不同的类型,而且类型还不确定。那么可以将泛型定义在方法上。
方法上定义的泛型,是跟Object obj功能完全一样的么?有什么不同?

作者: 张雪磊    时间: 2012-8-12 18:26
不一样的,如果用Object,是在用父类的引用接收子类对象,这是在用多态的特性
例如Object obj = new String("abc");这实际上把子类向上提升成父类了,
他就是一个Object对象了,如果要操作子类的方法的时候还需要向下强转。
而泛型,当你调用泛型函数指定了类型,比如把那个T,或Q就指定成String,
Integer 那他的数据类型就是String或Integer了,你可以直接使用了。如果你
定义的类型不是指定的泛型类型,编译器就直接报错了。





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