跟我学(Effective Java 2)第23条:请不要在新代码中使用原生态类型

第23条:请不要在新代码中使用原生态类型

泛型(generic type):声明中具有一个或者多个类型参数的类或者接口的统称。

原生态类型(raw type):不带任何实际类型参数的泛型名称。

每个泛型都定义一个原生态类型,即不带任何实际类型参数的泛型名称,如List对应的原生态类型是List。

原生态类型和泛型对比:

原生态类型 (如List)
无编译前错误提示
取值需要强转对应类型

泛型:(如List<E>)
编译前有错误提示或者警告
取值时不需要强转,直接获取对应类型

原生态类型失掉了泛型在安全性和表述性方面的优势,但即使这样,原生态类型依然存在,主要原因是早期版本存在量大,并已经根深蒂固,所以要保证其合法使用,即移植兼容性。

无限制的 通配符类型 ?

无限制通配类型Set<?>和Set的区别: 如果不确定或者不关心实际的类型参数,就使用无限制通配类型,不能将任何元素(除null外)放到Set<?>中,如果尝试这样做,在编译时就会提示错误。

和原生态类型相比,通配符是安全的,所以当不确定类型时,建议使用 ?。

总之,使用原生态类型会在运行时导致异常,因此不要在新代码中使用。除非是类文字中或者instanceof中才使用原生态类型。Set是参数化类型,表示可以包含任何对象类型的集合。Set<?>是通配符类型,标示只包含某种未知对象类型的集合。Set则是原生态类型。前两种是安全的,最后一种不安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值