Java泛型
Java泛型
Java1.5中引入泛型,允许在定义类、接口时,通过一个标识来表示类中某个属性的类型或是某个方法的返回值及参数类型。类型参数在使用时确定。
不使用泛型的问题
- 类型不安全
- 强制类型转换出错
集合中使用泛型
ArrayList<Integer> list = new ArrayList<>();//Java7后,类型推断
这样在编译时就会进行类型检查,也避免了强制类型转换。
Iterator遍历
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
iterator.next();
}
嵌套
Set<Map.Entry<String, Integer>> entry = map.entrySet();
自然排序
public class MyClass implements Comparable<MyClass>{
@override
public int compareTo(MyClass o){
...
}
}
比较时不需要进行类型判断。
定制排序同理
自定义泛型
泛型类、泛型接口
public class MyClass<T>{
//类的内部结构就可以使用类的泛型
}
- 如果实例化没有指明类的泛型,则认为是Object类型
继承
public class Son1 extends Father<Integer>{
//子类没有泛型
}
public class Son2<T> extends Father<T>{
//子类仍然是泛型类
}
注意:
- 泛型不能使用基本数据类型
- 异常类不能是泛型的
- 不能用new E[],但是可以:E[] elements = (E[]) new Object[capacity];
- 对于父类的泛型,子类可以全部保留、部分保留,也可以指定或擦除
泛型方法
public static <E> List<E> myMethod(E[] arr){
}
注意:
- 泛型要写在修饰符后面
通配符
List<Object> list1 = null;
List<String> list2 = null;
List<?> list = null;
list = list1;
list = list2;
print(list1);
print(list2);
public void print(List<?> list){
Iterator<?> iterator = list.iterator();
...
}
可以使用通配符作为泛型的通用父类,实现多态。
有限制条件的通配符
- :指定上界
- :指定下界

浙公网安备 33010602011771号