首页 > 代码库 > Java 之泛型

Java 之泛型

两种快速理解泛型的描述

1. 数据类型是抽象的,这个类可以处理很多数据类型。里面的T在被实例化的时候可以用任意类型代替。

2.  泛型,想成一个桶,你装水或者装沙子都行,这个桶只负责提供装满水或者装满沙子的功能 。


官方解释:

泛型程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部份,那些部份在使用前必须作出指明。

泛型的定义主要有以下两种:

  1. 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)
  2. 在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(现在人们大多把这称作模板)

不论使用那个定义,泛型的参数在真正使用泛型时都必须作出指明。

一些强类型程序语言支持泛型,其主要目的是加强类型安全及减少类转换的次数。

伪代码例子

类 例泛类<T> {
  值 : T
 
  设置值(新值 : T) {
    值 := 新值
  }
 
  获取值() : T {
    返回 值
  }
}
 
例方法1() {
  例对象 : 例泛类<整数型>
  例对象 := 新 例泛类<整数型>()
  例对象.设置值(5)
  输出整数(例对象.获取值())
}
 
例方法2() {
  例对象 : 例泛类<浮点数型>
  例对象 := 新 例泛类<浮点数型>()
  例对象.设置值(5.5)
  输出浮点数(例对象.获取值())
}

在这例子中,例泛类是一个泛型,而T是一个类型参数。在例泛类中没指明T的实际类型,只有例方法1()例方法2()在使用例泛类时才加以指明。

运行这例子的例方法1()将输出整数5,而运行例方法2()将输出浮点数5.5。

Java的泛型

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