10、泛型
10、泛型
JDK1.5新增特性,允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。
泛型作用:编译时,就会进行类型检查,保证数据的安全,避免了强转操作
泛型的嵌套:
Set<Map.Entry<String,Integer>> entry = map.entrySet()
List<ArrayList> list = new ArrayList(); //二维数组泛型不能是 基本数据类型,若没有指明泛型类型默认为Object
自定义泛型结构:
自定义 泛型类,泛型接口:<T>
-
public class Order<T>{ T orderT; public T getOrderT(){ return orderT; } } Order<String> order = new Order<>(); //后面的<>可以不写--JKD1.7
泛型类可能有多个参数:
<E1,E2,E3>泛型类的构造器不用使用泛型
泛型不同的引用不能相互赋值
泛型要使用一路都用。要不用,一路都不要用
如果泛型结构 是一个接口或抽象类,则不可创建泛型类的对象。
泛型的指定中不能使用基本数据类型,可以使用包装类替换
静态方法中不能使用类的泛型。
异常类不能声明为泛型类
对于数组:不能使用new E[]。但是可以:E[] elements = (E[])new Object[capacity];
子类继承泛型类:
//1.不保留也不指明 class Son1 extends Father{} //2.指明泛型类型 class Son2 extends Father<Integer,String>{} //3.部分保留泛型 class Song3<T2> extends Father<Integer,T2>{} //4.全部保留 class song4<T1,T2> extends Father<T1,T2>{}
泛型方法:[访问权限] <泛型> 返回类型 方法名([泛型标识 参数名称]) 抛出的异常
-
public <E> E get(int id, E e) { E result = null; return result; }
泛型方法 与 泛型类没有关系;
泛型方法在调用时,指定泛型参数类型;
泛型方法可以声明为 静态;
通配符 <?>
类A 和 类B 是子父类关系时:
G< A > 和 G< B > 二者不具备子父类关系,是并列关系;
List<Object> list1; List<String> list2; //二者是并列关系A< G > 和 B< G > 是子父类关系;
使用通配符 来 作为所有泛型的 公共父类
List<?> list; //此时的list 是 list1,list2的公共父类 list = list2; list.add(null); //只能添加null对象 Object o1 = list.get(1); //可以读取数据,返回的是Object类型 通配符修饰的 公共父类 只能添加null
允许读取子类的数据,返回类型为Object
带限制条件的通配符:
extends 小于等于;super大于等于
List<? extends Person> list1 =null; // --> Person及其子类 List<? super Person> list2 =null; // ---> Person及其父类
我是菜鸡啊

浙公网安备 33010602011771号