JAVA 泛型 - Class<T>
来源:互联网 发布:matlab2015 mac破解版 编辑:程序博客网 时间:2024/06/05 15:58
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的获取
- 178_自定义滚动View
- ComboBox自动加载值
- 求最短路条数之类的~~~
- java之查询sql server数据库数据
- 179_Fiddler
- JAVA 泛型 - Class<T>
- Mysql关闭与启动
- 180_自定义ActionBar
- sql语句之join和where
- Oracle存储过程和自定义函数
- 用SIFT特征和RANSAC算法进行两幅图片的匹配
- Unity滚动视图的制作
- 181_富文本
- 如何将本地磁盘映射到服务器