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

时间:2018-06-13 07:57:41

标签: 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 

但它不起作用。

1 个答案:

答案 0 :(得分:1)

类确实代表单个类,PageDTO<BusinessClass>不是一个类,它是具有PageDTO类参数的BusinessClass类的参数化通用类型。 (请参阅java.lang.reflect.ParameterizedType / java.lang.reflect.Type

所以答案是:不可能做到这一点。

这里最大的问题是您要使用注释,否则您可以使用与GSON库中的TypeToken类似的语法(或仅使用它),但是要使用注释,您需要为此创建普通的命名类。

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