泛型通配符

JAVA泛型(generics)
1.JDK5中引入的新特性,提供了编译时类型安全监测机制,检测到非法的类型。
泛型本质上是参数化类型,即所操作的数据类型被指定为一个参数。

2.泛型优点
在没有泛型情况下,通过对Object的引用实现参数的“任意化”,该方式的缺点是显式的强制类型转化(这种转化需要开发者预知参数类型,同时强制类型转化错误时,编译器可能不提醒错误,但在运行的时候出现异常,增加安全隐患)

即,泛型好处是在编译时能够检查类型安全,并且所有的强制转换都是自动和隐式的。可应用泛型在类、方法、接口上

3.泛型类型参数和通配符
为增强可读性,通常由T/E/K/V/?

T(type)表示具体的一个java类型
(类型参数只有一种限定方式,)
KV(key/value)分别表示java中的键值

E(element)

?表示不确定的Java类型
无界通配符:

<?>对于不确定或者不关心实际要操作的类型,表示可以持有任何类型

上界通配符:

<? extend E> 用extend关键字声明,表示参数化类型可能是所指定的类型,或者是此类型的子类。 好处1:如果传入的类型不是E或者E的子类,编译不成功 好处2:泛型中还可以使用E的方法,不然得强转成E才能使用 类型参数列表如果有多个类型参数上限,用逗号分开 下界通配符: <? super E> 表示泛型中的参数必须是E或者E的父类,直至Object **上界通配符主要用于读数据,下界通配符主要用于写数据 **?和T的区别: <?>集合元素可以是任意类型,这种没有意义

指定集合元素只能是T类型

?和T都表示不确定类型,区别在于我们对T可以进行操作,对?不能操作

Class的区别:
通常在反射场景下使用
Class<?> 和Class
Class为类文件

public static T method(Class clazz){
return clazz.newInstance();
}

public void test(){
A a = method(A.class);
B b = method(B.class);
}
这里T在Class实例化的时候要转化为具体类。

不知道具体类的时候,声明可以:
public Class<?> clazz;

T如果想要在声明时,必须让当前的类指定T
public class Test{
public Class clazz;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值