学习笔记09 - java 泛型

泛型generic,jdk5.0中的新特性

泛型在集合中的使用

①集合接口和集合类在jdk5.0时都修改为待泛型的结构

②在实例化集合类时,可以指明具体的泛型类型

③凡是定义类或接口时,内部结构(构造器、方法、属性等)使用到泛型的位置,都为指定的泛型类型

④泛型类型必须是类(基本数据类型no,包装类yes);没有指定时,默认为Object

⑤jdk7类型推断 后面可省略 Map<String,Integer> map = new HashMap<String,Integer >();

自定义泛型

泛型类、泛型接口;泛型方法

泛型类、泛型接口

1.如果定义了泛型类,实例化没有指定泛型类型,默认为Object类型 【建议指定】

pulbic class order<T>{
          
    } 		
order<Integer> ord = new order();

2.子类继承带泛型的父类时,指明了泛型类型;则子类实例化时不需要再指明类型.【子类不是泛型类】

public class subOrder extends order<Integer> {
          
    } 	
subOrder sub1 = new subOrder();

3.子类继承带泛型的父类时,没有指明泛型类型;子类实例化时指明【子类是泛型类】

public class subOrder<T> extends order<T> {
          
    }
subOrder<String> sub2 = new subOrder();

补充:子类除了指定或保留(部分保留、全部保留)父类的泛型,还可以增加自己的泛型

`public class son<T1,A,B> extends father<String,T1,T2>{
          
   }`

【其中子类已经指明String,同2.】

4.声明构造器 public order(){}

5.泛型不同的引用不能相互赋值

6.在泛型类或接口中的静态方法中,不能使用类的泛型 【生命周期】

7.异常类不能是泛型的

8.数组 T[] arr = new T[10]; //编译不通过 T[] arr = (T[]) new Object[10]; //可以, 数组中元素需要是T类型或子类的对象

泛型方法

public static <E> void method(E[] arr){
          
    }
order.method(new String[10]);

泛型方法与类是否为泛型类没有关系;方法泛型参数与类的泛型参数没有关系

泛型方法可以是静态的,泛型参数是在调用方法时确定的 【区别于上述6.】

泛型在继承方面的体现

通配符 ?

经验分享 程序员 微信小程序 职场和发展