我有一个注释,需要 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/