java5 学习笔记2


 今天粗略的看了generic,泛型的基本功能,在C++中早就有了,不过Java中的generic的确多了很多东西,但是也正如许多人批判的,一大堆尖括号让代码变丑了,呵呵,不过我才刚开始学,没有体会


 基本功能不废话了,今天觉得比较印象深刻的是generic的类型转换,也就是说:
 LinkedList<Float> ff = new LinkedList<Float>();
 LinkedList<Number> nn ;
 nn = ff;
 这样是错误的,虽然Number是Float的父类,generic的类型转换只限于

基础类型,也就是说
 List<Float> kk = ff;
 是正确的。同样,如果
 Number n = new Float(3.2);
 ff.add(n);
 这样同样不能通过编译。


 之所以generic本身不能有类型转换(也就是使用参数的父类),我个人觉得主要是因为generic这个功能本身是一种编译期间的检查,而不是JVM的一种

改进,所有的generic类型,都会在编译期间被erasure(擦除)掉,实际上,上

面的代码经过编译后,JVM实际看到的代码应该是
 LinkedList ff = new LinkedList();
 具体的generic是不存在的,被擦除了。还有没有其他原因,还要继续深入学习才行~


 generic也可以进行类型限制,即类似下面
 class gTest<TT extends Runnable>{
  public void get(TT tt){
   tt.run();
  }
 }
 这里有点奇怪的是,Runnable明明是接口,但是这里却不用implements,而是统一用extends。我手头这本书没有讲,下次要借本专门的书来看看
 最后,关注《Java in a Nutshell 第五版》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值