java怎么获取泛型T的class

   2025-02-05 2900
核心提示:在Java中,由于类型擦除的限制,无法直接获取泛型类型的Class对象。但是,可以通过以下两种方式来获取泛型类型的Class对象:通过

在Java中,由于类型擦除的限制,无法直接获取泛型类型的Class对象。但是,可以通过以下两种方式来获取泛型类型的Class对象:

通过传递一个Class参数来获取泛型类型的Class对象:
public class MyClass<T> {    private Class<T> type;        public MyClass(Class<T> type) {        this.type = type;    }        public Class<T> getType() {        return type;    }}// 使用示例MyClass<String> myClass = new MyClass<>(String.class);Class<String> stringClass = myClass.getType();

在上面的示例中,通过在构造方法中传递一个Class参数来获取泛型类型的Class对象,并保存在一个成员变量中,然后通过getType方法来获取该Class对象。

通过反射来获取泛型类型的Class对象:
import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;public class MyClass<T> {    public Class<T> getType() {        Type type = getClass().getGenericSuperclass();        ParameterizedType paramType = (ParameterizedType) type;        Type[] actualTypeArguments = paramType.getActualTypeArguments();        return (Class<T>) actualTypeArguments[0];    }}// 使用示例MyClass<String> myClass = new MyClass<String>();Class<String> stringClass = myClass.getType();

在上面的示例中,通过使用反射,可以获取到泛型类型的Class对象。首先通过getClass方法获取当前对象的Class对象,然后通过getGenericSuperclass方法获取该Class对象的父类的Type对象,接着判断该Type对象是否为ParameterizedType类型,如果是的话,通过getActualTypeArguments方法获取到实际的类型参数的Type对象数组,最后通过强制转换为Class对象来获取到泛型类型的Class对象。

需要注意的是,在使用第二种方式获取泛型类型的Class对象时,必须在子类中实现一个无参的构造方法,否则会抛出ClassCastException异常。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言