泛型

定义

泛型是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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值