JAVA 泛型 - Class<T>
来源:互联网 发布:yii2框架源码 编辑:程序博客网 时间:2024/06/06 03:53
分类: Java
Class
类 Class 已经泛型化了,但是很多人一开始都感觉其泛型化的方式很混乱。Class 中类型参数 T 的含义是什么?事实证明它是所引用的类接口。怎么会是这样的呢?那是一个循环推理?如果不是的话,为什么这样定义它?
在以前的 JDK 中,Class.newInstance() 方法的定义返回 Object,您很可能要将该返回类型强制转换为另一种类型:
class Class {Object newInstance();
}
但是使用泛型,您定义 Class.newInstance() 方法具有一个更加特定的返回类型:
class Class {T newInstance();
}
如何创建一个 Class 类型的实例?就像使用非泛型代码一样,有两种方式:调用方法 Class.forName() 或者使用类常量X.class。Class.forName() 被定义为返回 Class。另一方面,类常量 X.class 被定义为具有类型 Class,所以 String.class 是Class 类型的。
让 Foo.class 是 Class 类型的有什么好处?大的好处是,通过类型推理的魔力,可以提高使用反射的代码的类型安全。另外,还不需要将 Foo.class.newInstance() 强制类型转换为 Foo。
考虑一个方法,它从数据库检索一组对象,并返回 JavaBeans 对象的一个集合。您通过反射来实例化和初始化创建的对象,但是这并不意味着类型安全必须完全被抛至脑后。考虑下面这个方法:
public static List getRecords(Class c, Selector s) {// Use Selector to select rows
List list = new ArrayList();
for (/* iterate over results */) {
T row = c.newInstance(); // use reflection to set fields from result
list.add(row);
}
return list;
}
可以像下面这样简单地调用该方法:
List l = getRecords(FooRecord.class, fooSelector);编译器将会根据 FooRecord.class 是 Class 类型的这一事实,推断 getRecords() 的返回类型。您使用类常量来构造新的实例并提供编译器在类型检查中要用到的类型信息。
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- JAVA 泛型 - Class<T>
- java泛型T.class的获取
- java泛型T.class的获取
- java泛型T.class的获取
- Java 泛型(Class test<T>{...})
- java泛型T.class的获取
- java泛型T.class的获取
- java 泛型 class<T> 创建方法
- java泛型T.class的获取
- SPI通信协议
- 二叉树的遍历 前序遍历 中序遍历 后序遍历
- 安卓shape使用详解
- [深度学习论文笔记][Video Classification] Long-term Recurrent Convolutional Networks for Visual Recognition a
- 第十二周-项目四 利用遍历思想求解图问题(5)
- JAVA 泛型 - Class<T>
- Android RectF类的构造函数参数说明
- 第十二周项目2--操作用邻接表存储的图
- Oracle 函数 Translate 的用法
- 虚拟化与云计算-第一章数据中心的构建与管理
- jquery的load方法
- shell 命令格式化代码
- 基于Base64的对称加密
- eclipse部署web项目至本地的tomcat但在webapps中找不到