黑马程序员技术交流社区

标题: 泛型下限限制的理解 [打印本页]

作者: 陆华山    时间: 2011-10-22 11:15
标题: 泛型下限限制的理解
如何理解泛型的下限限制  ?super E  


作者: 宁超    时间: 2011-10-22 12:12
  1. package com.cn.fanxing;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. class Toy  
  6. {  
  7.   
  8. }  
  9.   
  10. class SubToy extends Toy  
  11. {  
  12.   
  13. }  
  14.   
  15. class SubToy2 extends Toy  
  16. {  
  17.   
  18. }  
  19. public class Generics  
  20. {  
  21.   
  22.     public static void main(String[] args) throws Exception  
  23.     {  
  24.         Toy toy = new Toy();  
  25.         SubToy subToy = new SubToy();  
  26.         SubToy subToy2 = new SubToy();  
  27.   
  28.         List<? extends Toy> list = new ArrayList<Toy>();// 表示所持有对象是Toy子类   
  29.         List<? extends Toy> list1 = new ArrayList<SubToy>();// 表示所持有对象是Toy的子类   
  30.   
  31.         // list.add(toy); 错误的 因为list所持有的对象类型上限为Toy,但是他不知道具体持有的对象类型,   
  32.         // list.add(subToy); 错误的,理由同上   
  33.         // list.add(subToy2); 错误的,理由同上   
  34.   
  35.         // list1.add(toy); 错误的 因为list1所持有的对象类型上限为Toy,但是他不知道具体持有的对象类型,   
  36.         // list1.add(subToy); 错误的,理由同上   
  37.         // list1.add(subToy2); 错误的,理由同上   
  38.   
  39.         List<? super Toy> list2 = new ArrayList<Toy>();// 所持有对象为Toy的超类,下限为Toy,所以可以add()   
  40.                                                         // Toy及Toy的子类   
  41.         list2.add(toy);  
  42.         list2.add(subToy);  
  43.         list2.add(subToy2);  
  44.   
  45.         // List<? super Toy> list3 = new ArrayList<SubToy>();   
  46.         // 错误的,所持有对象为Toy的超类,下限为Toy,   
  47.         // 所以不可以超过下限Toy,将ArrayList泛型指定为SubToy   
  48.   
  49.         List<? super SubToy> list4 = new ArrayList<Toy>();// 所持有对象为SubToy的超类,下限为SubToy   
  50.                                                             // ,   
  51.                                                             // 可以将ArrayList泛型指定为Toy   
  52.                                                             // list4.add(toy);   
  53.                                                             // 错误的,因为虽然持有对象为SubToy的超类,但是容器不知道具体的类型是超类还是子类,所以不能放入超类,但是子类的话就可以的   
  54.         list4.add(subToy);  
  55.         list4.add(subToy2);  
  56.   
  57.         List<? super SubToy> list5 = new ArrayList<SubToy>();// 所持有对象为SubToy的超类,下限为SubToy   
  58.                                                                 // ,   
  59.         // 可以将ArrayList泛型指定为SubToy   
  60.         // list5.add(toy); 错误的,理由同list4   
  61.         list5.add(subToy);  
  62.         list5.add(subToy2);  
  63.   
  64.         // List<? super SubToy> list6 = new ArrayList<SubToy2>();   
  65.         // 错误的,所持有对象为SubToy的超类,下限为SubToy ,   
  66.         // 所以持有的对象可能为Toy,也可能为SubToy ,也就不能将具体的实现的泛型指定为SubToy2   
  67.   
  68.     }  
  69.   
  70. }
复制代码

作者: 杨杰    时间: 2011-10-22 12:22
跟着斑竹学习




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