我正在构建一个自动化的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>"]
答案 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)}
}
}