java泛型的约束与局限_java泛型之约束与局限性

使用java泛型时需要考虑一些限制。大多数限制都是由类型擦除引起的。

不能用基本类型实例化类型参数

不能用类型参数代替基本类型。因此,比如没有Pair,只有Pair。当然其原因是类型擦除。擦除之后,Pair类含有Object类型的域,而Object不能存储double值。

运行时类型查询只适用于原始类型

虚拟机中的对象总有特定的非泛型类型。因此,所有的类型查询只产生原始类型,例如:

A163400579-83485.jpg

下面的测试同样是错误的:

A163402797-83485.jpg

或者强制类型转换:

A163405016-83485.jpg

要记住这一点,instanceof不能与泛型一起使用来检查类型。用泛型类型进行强制类型转换,编译器也会发出警告。

同样的道理,getClass方法总是返回原始类型。例如:

package test;

public class Test {

public static void main(String[] args) {

Object s = new Pair();

Object i = new Pair();

System.out.println(s.getClass() == i.getClass());      //true

}

}

上例中,s.getClass()返回Pair.class,i.getClass()也是返回Pair.class,返回的都是原始类型。

不能创建参数化类型的数组

不能实例化参数化类型的数组,例如:

A163407219-83485.jpg

需要说明的是,只是不允许创建这些数组,而声明类型为Pair[]的变量仍是合法的,就如上面这个例子。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值