王程斯的专栏

静心做事

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 第五版》

阅读更多
文章标签: java float jvm c++ class
个人分类: J2SE
上一篇多线程之Worker Thread pattern和Swing
下一篇java5 学习笔记3——Enum
想对作者说点什么? 我来说一句

java 5

2007年05月11日 17.94MB 下载

JAVA5新特性介绍

2011年10月31日 383KB 下载

Java5【2】

2008年05月09日 1.39MB 下载

jsp&servlet学习笔记(第2版)光盘

2016年11月07日 450.6MB 下载

没有更多推荐了,返回首页

关闭
关闭