泛型

来源:互联网 发布:足球角球比分数据 编辑:程序博客网 时间:2024/06/03 21:04

定义

泛型是Java SE 1.5的新特性,本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
好处:安全,简单,可以将运行时错误提前到编译时错误。
泛型的好处是在编译时检查类型安全,并且所有自动转换都是自动的和隐式的,提高代码重用率。

泛型接口

public interface Map<K,V> {    public void put<K key, V value>;    public V get(K key);}

泛型方法

泛型方法独立于类而产生变化
注意:如果使用泛型方法可取代整个泛型化,那么久应该只使用泛型方法。
static方法,无法访问泛型类的参数,所以必须成为泛型方法。

public <T> void f(T x) {    System.out.println(x.getClass().getName);}

泛型擦除

泛型擦除的意思是,在泛型内部,无法获取任何有关泛型参数的信息。

Class c1 = new ArrayList<String>.getClass();Class c2 = new ArrayList<Integer>.getClass();c1 == c2;// ArrayList<String> 和 ArrayList<Integer>属于同一种类型

擦除的补偿,只能显式地传递类型Class对象。
注意:不能创建泛型数组,可以用ArrayList取代
用?表示未知类型

Class<?> classType = Class.forName("java.lang.String");

泛型上下限

上限: ? extends E 可以接受E或E的子对象
下限: ? super E 可以接受E或E的父对象
上限一般场景: 往集合中添加元素时,既可以添加E类型对象,又可以添加E的子类型对象,取出的时候,既可接受E的对象,又可接受E的子类对象。
下限一般场景: 从集合中获取元素的时候,可当当前类型接收,也可档父类类型接收。

泛型应用

当接收、方法和类中的操作引用数据不确定时,以前用Object,现在用泛型。
好处: 1.避免了强转 2.将运行问题转移到了编译时期。
细节:
1. 泛型代表什么取决于传入类型,没传则为Object
2. 泛型创建需两边指定类型一致。
3. 可以任意一边使用泛型,一边不用。

泛型类(Java 类库)

Collection<T>List<T>Set<T>Map<T>WeakReferenceSoftReferenceThreadLocal
原创粉丝点击