码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-01-25 00:30:34      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:自动   通过   title   nbsp   note   reference   括号   specific   具体类   

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类型参数,用<>尖括号括住,放在类名后面,等到使用这个类时再用一个实际的类型来替换,例子如下,

public class Holder3<T> {
  private T a;
  public Holder3(T a) { this.a = a; }
  public void set(T a) { this.a = a; }
  public T get() { return a; }
  public static void main(String[] args) {
    Holder3<Automobile> h3 =
      new Holder3<Automobile>(new Automobile());
    Automobile a = h3.get(); // No cast needed
    // h3.set("Not an Automobile"); // Error
    // h3.set(1); // Error

  }
 } ///:~ 

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

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

标签:自动   通过   title   nbsp   note   reference   括号   specific   具体类   

原文地址:https://www.cnblogs.com/FANKIKI/p/8343884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!