java 泛型 读书笔记

概念:

泛型本质上是提供类型的"类型参数",它们也被称为参数化类型(parameterized type)或参量多态(parametric polymorphism)。

 

作用:

1>类型安全。使用泛型可以使编译器知道变量的类型限制,进而可以在更高程度上验证类型假设。如果没有泛型,那么类型的安全性主要由程序员来把握,这显然不如带有泛型的程序安全性高。

2>消除强制类型转换。泛型可以消除源代码中的许多强制类型转换,这样可以使代码更加可读,并减少出错的机会。

3>向后兼容。支持泛型的 Java 编译器(例如 JDK5.0 中的 Javac)可以用来编译经过泛型扩充的 Java 程序(GJ 程序),但是现有的没有使用泛型扩充的 Java 程序仍然可以用这些编译器来编译。

4>层次清晰,恪守规范。无论被编译的源程序是否使用泛型扩充,编译生成的字节码均可被虚拟机接受并执行。也就是说不管编译器的输入是 GJ 程序,还是一般的 Java 程序,经过编译后的字节码都严格遵循《 Java 虚拟机规范》中对字节码的要求。可见,泛型主要是在编译器层面实现的,它对于Java 虚拟机是透明的。

5>性能收益。目前来讲,用 GJ 编写的代码和一般的 Java 代码在效率上是非常接近的。 但是由于泛型会给 Java 编译器和虚拟机带来更多的类型信息,因此利用这些信息对 Java 程序做进一步优化将成为可能。

 

泛型的运作过程:GJGeneric Java)是对 Java 语言的一种扩展,是一种带有参数化类型的 Java 语言。用 GJ 编写的程序看起来和普通的 Java 程序基本相同,只不过多了一些参数化的类型同时少了一些类型转换。实际上,这些 GJ 程序也是首先被转化成一般的不带泛型的 Java 程序后再进行处理的,编译器自动完成了从 Generic Java 到普通 Java 的翻译。

编程用的到的例子:

通配符

 

1 self-bounded types

  curiously recurring generics

父类使用泛型做成模板,然后对于不同的应用

使用派生出来的类。然后填充参数,取出值什么的都用这个子类。注重模板功能 

    self-bounded 

       这个迫使使用这个泛型的类为其子类

对于参数化的接口,使用时需要注意这种情况 

   public  interface A<T>{}

   public class B implents A<Integer>{

   }

   这么做是不行的,编辑器会认为 c 实现了两个接口,因了擦洗(erasure),或者也可以这么理解C继承了B integer 也继承过来了。你再换个double 编辑器不认的。

   public class C extends  B implentA<Double>{

 

   }

   这时你如果写成这样

   public class C extends  B implent A{

 

   }

    编辑器是认的。

   或者这样

    public class C extends  B implentA<Integer>{

 

   }

  也是行的。

   或者这样

   public class C extends B{

}

 

 这也是行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章