Java泛型相关问题


话说泛型应该是C++里面先出来的玩意。但是JAVA 5开始也有了。那么什么叫泛型呢?

我的理解:泛型就是将类型参数化。也就是我们传参数时不再限于传一个特定类型的值了。举例说明:一下代码我们经常看到吧?

List<T> list=new ArrayList<T>():

其中T就决定了类型,但是Java里面T不允许是基础类型(int、long、double等,如果需要使用这些基础类型,可以用他们对应的包装类);

对于这个的使用我们都不陌生,只要是学过Java的基本都应该用过。但是很多人都会忽略一个比较基础的问题,我们怎么定义一个自己的泛型类呢?

例:

public class Generic<V>{
           T t;
           Generic(T t){
            this.t=t;
  }
}


这个也比较简单,但是我们经常会通过各种途径知道这样那样的警告:

1、不能有类似于T t=new T(),这样的实例化T的语句

2、T不能是静态变量

3、不适当的重载会出现问题

这个是神马原因呢??

其实当我们尝试去了解Java泛型实现的机制就一目了然了。很过官方、非官方正式文档都说Java的泛型使用的是叫擦拭的原理:当Java代码被编译时,全部泛型类型的信息都会被擦拭。实际上的意思就是说:构造延迟

因为可以擦除功能,所以 List<Integer>List<Long>是同一个类,编译器在编译 List<T>时只生成一个类。因此,在编译 List<T>类时,编译器不知道 T所表示的类型,所以它就不能像知道类所表示的具体类型那样处理 List<T>类定义中的类型参数(List<T>中的T)。

因为运行时不能区分 List<String>List<Integer>(运行时都是 List),所以上面几个警告当然就很明显是应当注意的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值