java获取泛型的class的方法
时间: 2023-08-29 22:09:12 浏览: 125
在 Java 中,由于泛型的类型信息在运行时会被擦除,所以无法直接通过泛型参数获取泛型的 class。不过,你可以通过一些技巧来获取泛型的 class。以下是两种常用的方法:
方法一:通过构造函数参数获取
```java
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericClass<T> {
private Class<T> clazz;
public GenericClass() {
Type type = getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) type;
this.clazz = (Class<T>) parameterizedType.getActualTypeArguments()[0];
}
public Class<T> getGenericType() {
return clazz;
}
}
```
你可以通过继承 `GenericClass` 并指定具体的泛型类型来获取泛型的 class。例如:
```java
public class MyClass extends GenericClass<String> {
// ...
}
public class Main {
public static void main(String[] args) {
MyClass myClass = new MyClass();
Class<String> genericType = myClass.getGenericType();
System.out.println(genericType); // 输出:class java.lang.String
}
}
```
方法二:通过传入 Class 对象获取
```java
public class GenericClass<T> {
private Class<T> clazz;
public GenericClass(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getGenericType() {
return clazz;
}
}
```
你可以直接在创建 `GenericClass` 对象时传入泛型的 class。例如:
```java
public class Main {
public static void main(String[] args) {
GenericClass<String> genericClass = new GenericClass<>(String.class);
Class<String> genericType = genericClass.getGenericType();
System.out.println(genericType); // 输出:class java.lang.String
}
}
```
这两种方法都可以在运行时获取泛型的 class。请根据你的需求选择合适的方法。
阅读全文