java 获取泛型t的class
时间: 2023-05-04 19:02:00 浏览: 102
Java中获取泛型T的Class通常有两种方式。
第一种方式是使用泛型类的getClass()方法来获取泛型T的Class信息。这种方式的前提是必须要创建泛型对象。具体实现方法如下:
```
public class GenericClass<T>{
public Class<T> getGenericClass() {
Class<T> cls = (Class<T>) ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
return cls;
}
}
public class Main {
public static void main(String[] args) {
GenericClass<String> gc = new GenericClass<String>(){};
System.out.println(gc.getGenericClass());
}
}
```
第二种方式是使用TypeReference类。这是由Jackson库提供的一个工具类,可以避免在运行时由于泛型擦除而导致的Class信息丢失的问题。具体实现方法如下:
```
public abstract class TypeReference<T> {
private final Type type;
protected TypeReference() {
Type superClass = getClass().getGenericSuperclass();
if (superClass instanceof Class<?>) {
throw new IllegalArgumentException("Internal error: TypeReference constructed without actual type information");
}
type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public Type getType() {
return type;
}
}
public class Main {
public static void main(String[] args) {
TypeReference<List<String>> typeReference = new TypeReference<List<String>>() {};
System.out.println(typeReference.getType());
}
}
```
无论是哪种方式,获取泛型T的Class都可以方便地进行类型检查和类型转换操作。但需要注意的是,在获取泛型T的Class时,必须要保证T已经被实例化。如果T没有被实例化,则获取的Class信息可能不准确,无法保证正确性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)