Java泛型Generic - Thinking in Java读书笔记

1.什么是泛型?

泛型就是可适用于很多的类,它实现了参数化类型type parameter的概念,参数化类型指可使用多种类型。

多态是一种泛化机制。

例如方法 A(Base b){}//Base是一个基类

这样方法A就可以接受从这个基类Base的任何子类作为参数。方法的参数也可以是一个接口,但是由于类的单继承体系和接口的约束(

An interface still requires that your code works with that particular interface. 

),不能实现将代码应用于不明确的类型,无法做到松耦合。

 

2.什么时候用到泛型?怎么用?

 1)创造容器类。Create container classes.

There are some cases where you want a container to hold multiple types of objects, but typically you only put one type of object into a container. One of the primary motivations for generics is to specify what type of object a container holds, and to have that specification backed up by the compiler. 

有些情况下你想用一个容器来持有多种对象,但容器通常只能存储一种对象。泛型最主要的一个目的是说明一个容器能持有什么类型的对象,而且由编译器来保证准确性。

所以我们可以暂时不指定类型,稍后再决定具体类型。使用type parameter类型参数,用<>尖括号括住,放在类名后面,等到使用这个类时再用一个实际的类型来替换,例子如下,

 1 public class Holder3<T> {
 2   private T a;
 3   public Holder3(T a) { this.a = a; }
 4   public void set(T a) { this.a = a; }
 5   public T get() { return a; }
6 public static void main(String[] args) { 7 Holder3<Automobile> h3 = 8 new Holder3<Automobile>(new Automobile()); 9 Automobile a = h3.get(); // No cast needed 10 // h3.set("Not an Automobile"); // Error 11 // h3.set(1); // Error 12 } 13 } ///:~

 

20180124未完待续... 

 

 

转自维基百科中Java泛型

https://zh.wikipedia.org/wiki/%E6%B3%9B%E5%9E%8B

Java 的泛型[编辑]

Java 泛型的参数只可以代表类,不能代表个别对象。由于Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型,而且无法直接使用基本值类型作为泛型类型参数。Java编译程序在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。

由于运行时会消除泛型的对象实例类型信息等缺陷经常被人詬病,Java及JVM的开发方面也尝试解决这个问题,例如Java通过在生成字节码时添加类型推导辅助信息,从而可以通过反射接口获得部分泛型信息。通过改进泛型在JVM的实现,使其支持基本值类型泛型和直接获得泛型信息等。

Java允許對個別泛型的類型參數進行約束,包括以下兩種形式[2](假設T是泛型的類型參數,C是一般类、泛類,或是泛型的類型參數):

  • T实现接口I
  • TC,或繼承自C
posted @ 2018-01-24 22:30  KIKI_FAN  阅读(101)  评论(0编辑  收藏  举报