java - 我可以将模板类中的类文字作为注释的参数传递吗?

标签 java reflection annotations springfox

我有一个注释,需要 Class<?>作为值(来自 springfox 的 @ApiResponse 的响应字段)。我想要映射的响应是一个模板类( PageDTO<T> ),但我无法获取我的特定实体的类文字,例如PageDTO<BusinessClass>.class 。 唯一有效的选择是定义另一个类:

class Doc extends PageDTO<BusinessClass> 

并将 Doc.class 的值作为参数传递。

是否有一种方法可以在不为每个带注释的方法定义类的情况下实现相同的结果?

我尝试了双重类型转换方法:

(Class<PageDto<BusinessClass>>)(Class<?>)PageDTO.class 

但是没有成功。

最佳答案

类确实代表单个类,PageDTO<BusinessClass>不是一个类,它是 PageDTO 的参数化泛型类型与 BusinessClass 一起上课类参数。 (参见 java.lang.reflect.ParameterizedType/java.lang.reflect.Type )

所以答案是:不可能这样做。

这里最大的问题是您想要使用注释,否则您可以使用类似于 TypeToken 的语法。来自 GSON 库(或者只是使用它),但是使用注释,您需要为此创建正常的命名类。

你真的需要那种类型吗?你不能从其他地方读取它吗? (我对springfox不熟悉)也许返回类型?
否则,您可以尝试创建更高级的注释,其中包含类和可选参数的位置,但这也远非完美 - 因为您将无法处理嵌套的泛型类型或通配符。
其他选项是使用字符串来表示泛型类型,但它不是类型安全的,您需要或编写一些库来将其解析回 java.lang.reflect.Type

关于java - 我可以将模板类中的类文字作为注释的参数传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50831945/

相关文章:

java - 如何在虚拟键盘上使字母彼此间隔

java - 如何在另一个生成字节码类中使用匿名类实例

java - 反射助手 Java 库

java - gradle 在 Android Studio 中一直失败

java - 如何调试这个错误?

java - 从Java执行sh文件

java - 如果条件满足,Hibernate 执行 OneToMany

javascript - 如何判断 js 类方法是否是静态的?

c# - 混合授权注解

java - Hibernate CollectionOfElements EAGER 获取重复元素