Java小记-如何获取类定义中泛型的clazz-运行时泛型的真正类型

Java小记-如何获取类定义中泛型的clazz-运行时泛型的真正类型

知识点很偏。型如:

1
2
3
4
5
6
public abstract class TestA<T>{
public void test(){
//这里要获取到泛型T的具体类型
}
}

这个时候怎么办呢?

方法很简单代码如下:

1
2
3
4
5
6
7
8
9
10
public abstract class TestA<T>{
public void test(){
//这里要获取到泛型T的具体类型
}
public Class<T> getClazz(){
return (Class <T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
}

注意这里的方法是获取到当前类的泛型的参数列表,然后获取其中第一个参数。因为我们这里只定义了一个泛型嘛,如果要使用两个,或者更多只需要更改数组索引和返回类型就可以了。

相信你可以写出更加骚气的代码。

我将一直的无知与迷惑,我是黄油香蕉君,再见。

给作者买杯咖啡吧。喵~