Java 泛型设计限制

1.1 不能将泛型用在创建类型对象中,原因则是因为Java泛型中存在类型擦除的原因,所以会导致在Java虚拟机执行时,所有泛型类型都会相应的变为它的原始类型,这就意味着如果创建泛型对象则Java虚拟机会将创建的对象改变为Object这肯定不会是希望所应该有的目的。



1.2 不能将泛型应用在基本数据类型中,原因也是因为类型擦除机制的缘故,而基本类型不属于对象,如果要将基本类型应用到泛型当中则必须使用相应的包装器来做为替代方式。



1.3 不能将泛型用在异常捕获和用泛型来实现Throwable子类,如果这样做的会导致无法通过编译。



1.4 泛型数组是不合法的,原因同样出于类型擦除会导致创建的数组变为Object,而如果需要达到这样的目的,则必须使用类型信息中的Class类来满足要求。如果先创建一个类型数组而后转型为Object或是先声明类型数组而后创建一个Object数组通过强制类型转换来实现类型数组都将导致失败或者是类型擦除方面的问题。



1.5 无法将泛型用于静态的上下文中,原因同样还是出于类型擦除,如果允许这样实现则有可能使用泛型创建一个共享Swing构建或者AWT构建等一些会出现严重错误的缺陷。



1.6 使用泛型时应注意覆盖equals等方法的问题,原因是会导致编写出的代码导致一些难于发现的错误,但是表面上却很难让进行错误的查找。



1.7 在使用泛型时不能同时为两个接口的子类型,而这2个接口是同一个接口的不同参数,

这条限制可以理解为,如果Employee类实现了Comparable<Employee>而Manager类继承了Employee类并且实现Comparable<Manager>接口,这样一来虽然子类和父类实现接口的约束条件是不同的,但是却是是想了同样的接口而该接口的类型参数又是父子的继承关系。则会与Java虚拟机合成的桥方法可能产生一些冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值