JavaSE_8系列博客——Java语言的特性(六)--泛型(5)--泛型的使用
来源:互联网 发布:su建模软件 编辑:程序博客网 时间:2024/05/16 11:14
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
- JavaSE_8系列博客——Java语言的特性(六)--泛型(5)--泛型的使用
- JavaSE_8系列博客——Java语言的特性(六)--泛型(2)--何时何地使用泛型?
- JavaSE_8系列博客——Java语言的特性(六)--泛型(3)--泛型和类型通配符
- JavaSE_8系列博客——Java语言的特性(六)--泛型(4)--Java中泛型实现的原理
- JavaSE_8系列博客——Java语言的特性(六)--泛型(1)--宏观把控
- javaSE_8系列博客——Java语言的特性(四)--注解--(5)-- 如何使用自定义的注解?
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识
- javaSE_8系列博客——Java语言的特性(三)--类和对象(10)--对象的使用
- javaSE_8系列博客——Java语言的特性(四)--注解--(1)--基础知识
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(5)-- 运算符
- javaSE_8系列博客——Java语言的特性(三)--类和对象(12)--使用this关键字
- javaSE_8系列博客——Java语言的特性(三)--类和对象(21)--何时使用Lambda 表达式?
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(4)--使用接口作为类型
- javaSE_8系列博客——Java语言的特性(三)--类和对象(5)--定义方法
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(1)-- 变量
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(4)-- 变量和数组
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(6)-- 表达式、语句、块
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(7)-- 流程控制语句
- 1课:单片机简叙
- 【分治计数】BZOJ4237 稻草人
- ICP配准
- 复用类 其二
- freemarker日期转换
- JavaSE_8系列博客——Java语言的特性(六)--泛型(5)--泛型的使用
- spark学习部分笔记
- javaweb 网页
- 并查集的使用(3):连通图
- Cookie和Session以及两者区别
- (hdu 2089)不要62(数位DP)
- 19-特殊工具和技术
- RecyclerView-错误收集:当你刷新RecyclerView程序崩掉的时候(1)
- 星际之门(一)