`
jjfat
  • 浏览: 264633 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GBin1推荐教程之Java泛类型(Generics)快速入门

阅读更多

发布时间: 2011-9-20       来源:javacodegeeks.com       翻译: gbin1.com

泛类型(Generics)是Java SE5.0里的特性,在发布后的几年里,我相信每个java开发者都不仅仅听说过,而且实实在在的使用过。这里有很多的免费和付费资源可以用来学些泛类,如下:

尽管这里有很多的信息,但是很多程序员还是弄不清楚java泛类的使用。这就是为什么我这里总结了所以使用泛类所需要的基本知识。

 

泛类使用的初衷

最简单的方式来想象泛类是一种语法方式用来省去类型转换操作:

List<Apple> box = ...;
Apple apple = box.get(0);

以上代码很好解释,box是一个Apple对象的列表,我们使用get方法取出一个苹果的实例而不需要做强制类型转换。如果我们不使用泛类特性,那么我们将需要这样编码:

List box = ...;
Apple apple = (Apple)box.get(0);

毋庸置疑,泛类的主要优势是让编译器来跟踪参数类型,执行类型校验并且转换类型:编译器保证了转换的正确性。

替代程序员的人为类型跟踪和转换,编译器会负责帮助开发人员来强化类型检查及其编译时的错误验证,这样能够保证程序尽量少的出现运行环境错误和debug的成本。

泛类语法

泛类语法介绍了变量类型的概念。一个变量类型,根据Java的标准,是一个无限制条件的标示符并且由以下方式定义:

  • 泛类类声明
  • 泛类接口声明
  • 泛类方法声明
  • 泛类构造器声明

泛类型类和接口

一个类或者接口如何有一个或者多个类型变量那么他们就是泛类型类或者接口。类型变量在类名之后并且由尖括号分隔:

public interface List<T> extends Collection<T> {
    ...    
}

简单来说,类型变量作为一个参数提供信息给编译器用来执行校验。

许多的Java类库里的类,例如Collections,都被修改成为泛类型。我们用来演示的代码中的List接口就是一个泛类型。在那个代码片段中 box是List<Apple>的参考,是一个使用类型变量Apple执行List接口的实例。类型变量是编译器用来调用get方法在执行自 动类型转换的类型定义。

实际上,新的泛类型签名或者List接口的get方法是:

T get(int index);

这个方法返回一个真正的T类型对象,T是类型变量指定在List<T>声明中。

泛类型方法和构造器

非常类似,如果我们声明一个或者多个类型变量的话,方法和构造器都可以被泛类型化。

public static <t> T getFirst(List<T> list)

这个方法将会接受一个参考到List<T>并且返回T类型的对象。

 

完整全文请查看原文。

 

原文来自: GBin1推荐教程之Java泛类型(Generics)快速入门

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics