使用反射获取Java中泛型参数的类型

使用反射获取Java中泛型参数的类型

是否可能获得泛型参数的类型?

例如:

public final class Voodoo {
    public static void chill(List<?> aListWithTypeSpiderMan) {
        // Here I'd like to get the Class-Object 'SpiderMan'
        Class typeOfTheList = ???;
    }

    public static void main(String... args) {
        chill(new ArrayList<SpiderMan>());
    }}


不负相思意
浏览 749回答 3
3回答

侃侃尔雅

有一次,我偶然发现Class<T>&nbsp;persistentClass&nbsp;=&nbsp;(Class<T>) &nbsp;&nbsp;&nbsp;((ParameterizedType)getClass().getGenericSuperclass()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getActualTypeArguments()[0];所以似乎有一些我不太理解的倒影魔法.抱歉的。

富国沪深

实际上我能搞定这件事。考虑以下片段:Method&nbsp;m;Type[]&nbsp;genericParameterTypes&nbsp;=&nbsp;m.getGenericParameterTypes();for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;genericParameterTypes.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;genericParameterTypes[i]&nbsp;instanceof&nbsp;ParameterizedType&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type[]&nbsp;parameters&nbsp;=&nbsp;((ParameterizedType)genericParameterTypes[i]).getActualTypeArguments();//parameters[0]&nbsp;contains&nbsp;java.lang.String&nbsp;for&nbsp;method&nbsp;like&nbsp;"method(List<String>&nbsp;value)" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;}我使用JDK 1.6
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java