当涉及到集合时,我了解泛型。但是在 Class<T>
的情况下是什么意思?类(class)?当你实例化一个 Class
对象,只有一个对象。那么为什么 T
范围?它具体说明了什么?为什么有必要(如果有的话)?
最佳答案
类型参数<T>
已添加到 java.lang.Class
启用一个特定的成语1 - 使用 Class
对象作为类型安全的对象工厂。本质上,添加 <T>
让您以类型安全的方式实例化类,如下所示:
T instance = myClass.newInstance();
类型参数<T>
表示类本身,使您能够通过存储 Class<T>
来避免类型删除的不良影响在泛型类中或将其作为参数传递给泛型方法。请注意 T
仅靠其本身不足以完成此任务2:T
的类型被删除,所以它变成 java.lang.Object
在引擎盖下。
这是一个经典示例,其中 <T>
类的参数变得很重要。在下面的示例中,Java 编译器能够确保类型安全,让您从 SQL 字符串和 Class<T>
的实例生成类型化集合。 .请注意,该类用作工厂,并且可以在编译时验证其类型安全性:
public static <T> Collection<T> select(Class<T> c, String sqlStatement) {
Collection<T> result = new ArrayList<T>();
/* run sql query using jdbc */
for ( /* iterate over jdbc results */ ) {
T item = c.newInstance();
/* use reflection and set all of item’s fields from sql results */
result.add(item);
}
return result;
}
由于 Java 删除了类型参数,使其成为 java.lang.Object
或指定为泛型 upper bound 的类,访问 Class<T>
很重要select
中的对象方法。从 newInstance
返回 <T>
类型的对象,编译器可以执行类型检查,消除强制转换。
1
2 这与没有类型删除的泛型实现不同,例如 .NET 中的实现。
3 Java Generics tutorial甲骨文。
关于java - 类 Class<T> 的泛型性质是什么意思?什么是T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406025/