Java泛型
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
一、泛型类概述
-
泛型类概述:把泛型定义在类上
-
定义格式:public class 类名<泛型类型1,…>
-
注意事项:泛型类型必须是引用类型
-
案例
public class ObjectTools<K> { private K k ; public K getK() { return k; } public void setK(K k) { this.k = k; } }
二、泛型方法的概述
-
泛型方法概述:把泛型定义在方法上
-
定义格式:public <泛型类型> 返回类型 方法名(泛型类型 变量名)
-
案例
public <E> void show(E e){ System.out.println(e); }
三、泛型接口的概述
-
泛型接口概述:把泛型定义在接口上
-
定义格式:public interface 接口名<泛型类型>
-
案例
public interface Inter<T> { public abstract void show(T t) ; }
四、泛型通配符、向上限定、向下限定
- <?>:任意类型,如果没有明确,那么就是Object以及任意的Java类
- <? extends E>:向下限定,E及其子类
- <? super E>:向上限定,E及其父类
-
案例
/** * 泛型如果明确了数据类型以后,那么要求左右两边的数据类型必须一致 */ Collection<Object> col1 = new ArrayList<Object>() ; Collection<Object> col2 = new ArrayList<Animal>() ;//报错 // ? 表示任意的数据类型 Collection<?> col5 = new ArrayList<Object>() ; Collection<?> col6 = new ArrayList<Animal>() ; // ? extends E : 向下限定 , ? 表示的是E或者E的子类 Collection<? extends Animal> col9 = new ArrayList<Object>() ;//报错 Collection<? extends Animal> col10 = new ArrayList<Animal>() ; Collection<? extends Animal> col11 = new ArrayList<Dog>() ; // ? super E: 向上限定 , ? 表示的是E或者E的父类 Collection<? super Animal> col13 = new ArrayList<Object>() ; Collection<? super Animal> col14 = new ArrayList<Animal>() ; Collection<? super Animal> col15 = new ArrayList<Dog>() ;//报错