泛型类
1.泛型类在数据结构中的使用(java中的数据结构都采用了泛型的思路进行构造,所以一般都用泛型来调用数据结构)
1 ArrayListlist = new ArrayList (); 2 list.add(78); 3 list.add(89); 4 list.add(99); 5 list.add(60); 6 7 for (Integer score: list) 8 { 9 System.out.println(score); 10 } 11 12 Iterator it = list.iterator(); 13 while (it.hasNext()) 14 { 15 System.out.println(it.next()); 16 }
1 Mapmap = new HashMap (); 2 map.put("a", 1); 3 map.put("b", 2); 4 map.put("c", 4); 5 Set > s = map.entrySet(); 6 Iterator > it = s.iterator(); 7 while (it.hasNext()) 8 { 9 Entry et = it.next(); 10 String key = et.getKey(); 11 Integer value = et.getValue(); 12 System.out.println(key + " " + value); 13 }
2.自定义泛型类
自定义泛型类即在类中含义泛型变量即为自定义泛型类
例如:
1 String orderName; 2 int orderId; 3 //类的内部声明一个泛型类T,命名为orderT 4 T orderT; 5 6 public Order(){}; 7 8 public Order(String orderName,int orderId,T orderT) 9 { 10 this.orderName = orderName; 11 this.orderId = orderId; 12 this.orderT = orderT; 13 } 14 15 //以下的两个方法都不属于泛型方法,它们都是泛型类中的某个方法 16 public T GetOrderT() 17 { 18 return orderT; 19 } 20 21 public void SetOrderT(T orderT) 22 { 23 this.orderT = orderT; 24 } 25 }
3.泛型函数
注意:泛型类中对泛型进行处理的函数不属于泛型函数
例子:
1 //泛型方法实例: 2 public staticE GetE (E object) 3 { 4 return object; 5 } 6 /* 7 * 所以泛型方法的本质是:引用了泛型类型,并以此作为返回值或者参数 8 */
4.有关泛型的子类继承问题:
1 //将会默认为 2 class Son1 extends Father{ 3 public void Set() 4 { 5 a = 1; 6 b = 2; 7 } 8 } 9 10 //此时a只能为字符串,b只能为整型 11 class Son2 extends Father{ 12 public void Set() 13 { 14 a = "1"; 15 b = 2; 16 } 17 }
1 //此时则将不确定的泛型转移到子类Son3来确定,即仍保留了这个泛型 2 class Son3extends Father { 3 4 } 5 6 //保留了部分泛型,即T1确定为Integer,T2留到子类中再进行确定 7 class Son4 extends Father { 8 9 }
5.泛型在继承方面的特点
1 /* 泛型在继承方面的特点: 2 * 1.类A是类B的父类,但G和G并不具有子父类的关系 3 * 如果可以具有子父类关系,则A中就会混入B的数据,不符合泛型的要求 4 * 2.类A是类B的父类,A和B 5 * 6 */仍是子父类的关系
1 /* 通配符的使用 2 * 通配符:? 3 * 4 * 类A是类B的父类,G和G无关系,但二者的共同父类是G<?> 5 * 6 */
1 public static void test2() 2 { 3 List
6.有限制条件的通配符使用
1 public void test4() 2 { 3 /* 有限制条件的通配符使用 4 * 若A是B的父类,则记为A > B 所以 Object > A > B 5 * ? extends A: 6 * 分三种情况进行分析: 7 * 1.涉及到G(某一数据结构)<? extends A>整体赋值时,满足<=的含义,即A,B可以被赋值,Object不可以被赋值 8 * 2.涉及到从数据结构获取值时,满足>=的含义,即可以给Object和A对象赋值,不可以给B对象赋值 9 * 3.向数据结构添加数据类型:无法向数据结构中添加除null外的任意数据类型 10 * 11 * ? super A: 12 * 分三种情况进行分析: 13 * 1.涉及到G(某一数据结构)<? super A>整体赋值时,满足>=的含义,即A,Object可以被赋值,B不可以被赋值 14 * 2.涉及到从数据结构获取值时,满足>的含义,只能给Object的对象赋值 15 * 3.向数据结构添加数据类型:只能向数据结构中添加A的数据类型 16 * 17 */ 18 List<? extends Person> list1 = null; 19 List<? super Person> list2 = null; 20 21 //情况1 22 Listlist3 = new ArrayList<>(); 23 List list4 = new ArrayList<>(); 24 List