在Groovy中获取List的泛型类型

时间:2017-10-14 20:08:04

标签: groovy

我正在构建一个自动化的swagger插件。在这里,我运行带注释的类。

当我们谈论String的数据类型时,Long等就足够了我使用simpleName方法。

但是当进入List of List,Set,Collection时,我需要知道泛型类型。

那我怎么能这样做呢?

完成大部分工作的代码示例:

class Foo {
    List<String> myString
}

class SomeUtilClass {
    static String dataType(Class<?> c) {
        return c.simpleName
    }
    static List<String> dataTypes(Class<?> c) {
        return c.metaClass.properties.findAll {MetaProperty metaProperty ->
            metaProperty?.field != null
        }.collect {dataType(it.type)}

    }
}

SomeUtilClass.dataTypes(Foo) // ["List"] but I want something like ["List<String>"]

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我可以从缓存字段中查看泛型类型。

见下面的例子:

class SomeUtilClass {
    static String dataType(Class<?> c) {
        return c.simpleName
    }
    static List<String> dataTypes(Class<?> c) {
        return c.metaClass.properties.findAll {MetaProperty metaProperty ->
            metaProperty?.field != null
        }.collect {findGenerics(it.type)}

    }
    static void findGenerics(CachedField t) {
         t.field.genericType?.actualTypeArguments.collect {dataType(it)}
    }
}