您的位置:首页 > 编程语言 > Java开发

JavaSE_8系列博客——Java语言的特性(六)--泛型(5)--泛型的使用

2017-09-23 10:09 609 查看

JDK类库中泛型的使用

集合类

到目前为止,Java 类库中泛型支持存在最多的地方就是集合框架。就像容器类是 C++ 语言中模板的主要动机一样(参阅 附录 A:与 C++ 模板的比较)(尽管它们随后用于很多别的用途),改善集合类的类型安全是 Java 语言中泛型的主要动机。

集合类也充当如何使用泛型的模型,因为它们演示了泛型的几乎所有的标准技巧和方言。

所有的标准集合接口都是泛型化的

其他容器类

除了集合类之外,Java 类库中还有几个其他的类也充当值的容器。这些类包括 WeakReference、SoftReference 和 ThreadLocal。它们都已经在其包含的值的类型上泛型化了,所以 WeakReference 是对 T 类型的对象的弱引用,ThreadLocal 则是到 T 类型的线程局部变量的句柄。

像 Comparable 或 Class 这样的类中类型参数的含义更加微妙。有时,就像 Class 中一样,类型变量主要是帮助编译器进行类型推理。有时,就像隐含的 Enum 中一样,类型变量只是在类层次结构上加一个约束。

Class

类 Class 已经泛型化了,但是很多人一开始都感觉其泛型化的方式很混乱。Class 中类型参数 T 的含义是什么?事实证明它是所引用的类接口。怎么会是这样的呢?那是一个循环推理?如果不是的话,为什么这样定义它?

在以前的 JDK 中,Class.newInstance() 方法的定义返回 Object,您很可能要将该返回类型强制转换为另一种类型:

class Class {

Object newInstance();

}

但是使用泛型,您定义 Class.newInstance() 方法具有一个更加特定的返回类型:

class Class {

T newInstance();

}

Enum

JDK 5.0 中 Java 语言另一个增加的特性是枚举。当您使用 enum 关键字声明一个枚举时,编译器就会在内部为您生成一个类,用于扩展 Enum 并为枚举的每个值声明静态实例。所以如果您说:

与 Class 一样,Enum 也是一个泛型类。但是与 Class 不同,它的签名稍微更复杂一些:

总之,Enum 是一个参数化的类型,只可以为它的子类型实例化,并且这些子类型然后将根据子类型来继承方法。幸运的是,在 Enum 情况下,编译器为您做这些工作,一切都很好。

简单应用场景和实例练习

参考博客

http://lichaozhangobj.iteye.com/blog/476911

使用泛型的注意事项

参考博客:

http://www.cnblogs.com/panjun-Donet/archive/2008/09/27/1300609.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  泛型 java se
相关文章推荐