黑马程序员技术交流社区

标题: 关于泛型定义在方法上 [打印本页]

作者: 郭冰川    时间: 2013-1-17 21:37
标题: 关于泛型定义在方法上
本帖最后由 郭冰川 于 2013-1-18 00:27 编辑

一个是用的Object类,另一个是把泛型定义在方法上,效果一样啊,没觉得有什么优势,
我知道泛型定义在类上会更加安全简便,但是不明白泛型定义在方法上有什么好处,求高手解答!



作者: 黑马王振宇    时间: 2013-1-17 22:18
本帖最后由 黑马王振宇 于 2013-1-17 22:19 编辑

泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确操作的具体类型后,操作类型也就固定了。
所以当你类上定义泛型了,new出来的对象类型也就确定了,这就照成了不灵活。
为了让不同方法操作不同类型,而且类型还不确定,可以将泛型定义在方法上。
举个例子说明:
  1. class Demo{
  2.         public  <T> void show(T t)
  3.         {
  4.                 System.out.println("show:"+t);
  5.         }
  6.         public <Q> void print(Q q)
  7.         {
  8.                 System.out.println("print:"+q);
  9.         }
  10. }
  11. class GenericDemo
  12. {
  13.         public static void main(String[] args)
  14.         {
  15.                 Demo d = new Demo();
  16.                 d.show("haha");
  17.                 d.show(new Integer(4));
  18.                 d.print("heihei");  //这里就是定义在方法上的好处,可以传不同类型的对象。
  19.                 /*
  20.                 Demo<Integer> d = new Demo<Integer>();  //如果你定义类上那么就只能操作固定类型的对象了
  21.                 d.show(new Integer(4));
  22.                 d.print("hah");  //编译失败,类型不对
  23.                 Demo<String> d1 = new Demo<String>();
  24.                 d1.print("haha");
  25.                 d1.show(5);  //编译失败,类型不对
  26.                 */
  27.         }
  28. }
复制代码
希望能帮到你
作者: 黄锦成    时间: 2013-1-17 23:50
在这里是没什么区别。在有返回值的时候,就会体现出差异。如果用Object当做返回类型,要强转。如果使用泛型,就不用强转了
作者: 郭冰川    时间: 2013-1-18 00:26
黄锦成 发表于 2013-1-17 23:50
在这里是没什么区别。在有返回值的时候,就会体现出差异。如果用Object当做返回类型,要强转。如果使用泛型 ...

谢版主,明白了,还是版主水平高,现在好多人回答的时候都是答非所问弄一堆代码骗技术分
作者: 黄锦成    时间: 2013-1-19 16:16
郭冰川 发表于 2013-1-18 00:26
谢版主,明白了,还是版主水平高,现在好多人回答的时候都是答非所问弄一堆代码骗技术分 ...

这个你学多了就会明白了。像张老师说的,很多技术不是学不会,只要有时间,就能学到。




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