[译] 1.导言

<< 目录 · 目录 · 定义简单泛型 >>

                                                                                  

导言 (Introduction)

JDK 5.0给JAVA编程语言引入了一些新扩展,其中之一就是 泛型 (generics) 。

您可能很熟悉其他语言的类似结构,尤其是C++模板。如果是这样,您将看到两者既有相似之处,也有重大差异。

泛型允许您对类型进行抽象。最常见的示例是容器类型,如集合层次结构中的容器类型。 以下是这类的典型用法:

List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next(); // 3

上面第3行的类型转换(cast)有点烦人。通常情况下,程序员知道哪些数据被放到了指定的列表(list)中,然而类型转换必不可少。编译器只能保证迭代器返回一个Object 。为了确保给Integer类型的变量赋值是类型安全的,必须使用类型转换。

当然,类型转换不仅带来了混乱,它还可能引入运行时错误,比如说程序员不小心弄错了类型。

如果程序员想要正确地表达他们的意图,并将列表标记为限制包含特定的数据类型,该怎么办?这就是泛型的核心理念。下面是上面给出的程序片段使用泛型的一个版本:

List<Integer> myIntList = new LinkedList<Integer>(); // 1'
myIntList.add(new Integer(0)); // 2'
Integer x = myIntList.iterator().next(); // 3'

注意变量myIntList的类型声明。它表明这不只是个随意的List,而是一个Integer List,写作List<Integer>。我们说List是一个泛型接口,它接受类型参数(在本例是Integer)。我们还在创建List对象时指定了一个类型参数。

还要注意的是,第3行的强制转换已经消失了。

现在,你可能会认为我们所做的就是把可能产生的混乱搬来搬去,只是用第1'行的Integer类型参数替换了第3行的强制转换。然而,这里有一个很大区别:编译器现在可以在编译时检查程序的类型正确性。当我们说myIntList是用List<Integer>类型声明的,编译器能够保证它在任何地方和任何时候被使用都是正确的。相反,强制转换告诉我们程序员认为在代码的某一点上是正确的。

特别是在大型程序中,提高了可读性和健壮性。

                                                                                  

<< 目录 · 目录 · 定义简单泛型 >>

本文译自:https://docs.oracle.com/javase/tutorial/extra/generics/intro.html

转载于:https://my.oschina.net/tita/blog/2881123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值