黑马程序员技术交流社区

标题: 泛型限定初级运用 [打印本页]

作者: itheima_llt    时间: 2015-4-16 22:08
标题: 泛型限定初级运用
本帖最后由 itheima_llt 于 2015-4-16 22:10 编辑
  1. /*
  2. 6 泛型的高级应用
  3. 泛型的限定
  4. 本例主要演示:
  5. 1 泛型限定的由来
  6. 2 使用泛型限定的好处
  7. 3 泛型限定的基本类型
  8. ? extends E: 可以接收E类型或者E的子类型。上限。
  9. ? super E: 可以接收E类型或者E的父类型。下限
  10. ? 通配符
  11. 4 比较器使用泛型定义

  12. */

  13. /*
  14. 泛型限定思路
  15. 1 为了提高代码的复用性

  16. 下面这个例子可以发现,
  17. 如果想要用迭代器取出元素,
  18. 就必须使用两个迭代器
  19. 代码的复用性不高。
  20. --单独定义一个方法打印,使用通配符<?>,而不是使用<T>把泛型定义在方法上。
  21. 因为使用<T>的话,是可以传递对象的。T t = it.next();
  22. 而使用<?>则是不可能的!是不明确具体类型!

  23. 使用泛型是不可以使用类型特有的方法的,如it.next().length();
  24. 这就是泛型的弊端,和多态一样,“不能预先使用子类特有的方法”

  25. */

  26. //一、泛型没有限定
  27. /*
  28. import java.util.*;
  29. class GenericDemo6
  30. {
  31.         public static void main(String[] args)
  32.         {
  33.                 ArrayList<String> al = new ArrayList<String>();

  34.                 al.add("abc1");
  35.                 al.add("abc2");
  36.                 al.add("abc3");

  37.                 ArrayList<Integer> al1 = new ArrayList<Integer>();
  38.                 al1.add(4);
  39.                 al1.add(7);
  40.                 al1.add(1);

  41.                 printColl(al);
  42.                 printColl1(al1);
  43.         }

  44.         public static void printColl(ArrayList<String> al)//ArrayList<String> al = new ArrayList<Integer>();这个是无法接受的,错误
  45.         {
  46.                 Iterator<String> it = al.iterator();

  47.                 while(it.hasNext())
  48.                 {
  49.                         System.out.println(it.next().toString());
  50.                 }
  51.         }

  52.         public static void printColl1(ArrayList<Integer> al)
  53.         {
  54.                 Iterator<Integer> it = al.iterator();

  55.                 while(it.hasNext())
  56.                 {
  57.                         System.out.println(it.next().toString());
  58.                 }
  59.         }
  60. }
  61. */

  62. //二、泛型使用了通配符
  63. /*
  64. import java.util.*;
  65. class GenericDemo6
  66. {
  67.         public static void main(String[] args)
  68.         {
  69.                 ArrayList<String> al = new ArrayList<String>();

  70.                 al.add("abc1");
  71.                 al.add("abc2");
  72.                 al.add("abc3");

  73.                 ArrayList<Integer> al1 = new ArrayList<Integer>();
  74.                 al1.add(4);
  75.                 al1.add(7);
  76.                 al1.add(1);

  77.                 printColl(al);
  78.                 printColl(al1);
  79.         }

  80.         public static void printColl(ArrayList<?> al)
  81.         {
  82.                 Iterator<?> it = al.iterator();

  83.                 while(it.hasNext())
  84.                 {
  85.                         System.out.println(it.next().toString());
  86.                 }
  87.         }
  88. }
  89. */
复制代码






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