【问题标题】:How to find the parameterized type of the return type through inspection?如何通过检查找到返回类型的参数化类型?
【发布时间】:2009-07-31 17:08:13
【问题描述】:

我正在使用反射来获取类中的所有方法,如下所示:

Method[] allMethods = c.getDeclaredMethods();

之后我将遍历这些方法

for (Method m: allMethods){
    //I want to find out if the return is is a parameterized type or not
    m.getReturnType();
}

例如:如果我有这样的方法:

public Set<Cat> getCats();

如何使用反射找出返回类型包含Cat 作为参数化类型?

【问题讨论】:

    标签: java generics reflection


    【解决方案1】:

    你试过getGenericReturnType()吗?

    返回一个Type 对象,该对象表示此Method 对象所表示的方法的正式返回类型。

    如果返回类型是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。

    如果返回类型是类型变量或参数化类型,则创建它。否则就解决了。

    然后(从查看 Javadocs)看来,您必须将其转换为 ParameterizedType 并在其上调用 getActualTypeArguments()

    下面是一些示例代码:

        for (Method m : allMethods) {
            Type t = m.getGenericReturnType();
            if (t instanceof ParameterizedType) {
                System.out.println(t);       // "java.util.Set<yourpackage.Cat>"
                for (Type arg : ((ParameterizedType)t).getActualTypeArguments()) {
                    System.out.println(arg); // "class yourpackage.Cat"
                }
            }
        }
    

    【讨论】:

    • 是的,这种方法可行。只需要将 getActualTypeArguments()[0] 转换回 Class,然后我就可以调用 getName 了。谢谢。
    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多