泛型

xiaoxiao2021-02-28  107

定义

泛型是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> WeakReference SoftReference ThreadLocal
转载请注明原文地址: https://www.6miu.com/read-48266.html

最新回复(0)