如何获取Java参数化类型的.class属性?用于Swagger文档生成
参数化类无法直接获取带泛型参数的Class对象
首先明确:你不能直接获取ParametrizedClass<MyClass>.class,这在Java里是不可能的。
原因在于Java的泛型采用类型擦除实现:编译完成后,所有泛型参数信息都会被移除,运行时ParametrizedClass<MyClass>和ParametrizedClass<String>本质上共享同一个ParametrizedClass.class对象。直接写ParametrizedClass<MyClass>.class会触发编译错误,因为语法本身不允许这种写法。
针对你生成Swagger文档的需求,有几种替代方案:
- 使用Guava的
TypeToken:通过匿名内部类的方式保留泛型类型信息,运行时可以获取完整的参数化类型:Type parametrizedType = new TypeToken<ParametrizedClass<MyClass>>() {}.getType(); - Java原生反射获取
ParameterizedType:如果某个方法的返回值或参数定义了具体的泛型类型,比如:
可以通过反射获取方法的泛型返回类型:public ParametrizedClass<MyClass> getMyData() { ... }Method method = YourClass.class.getMethod("getMyData"); ParameterizedType type = (ParameterizedType) method.getGenericReturnType(); - Swagger框架自带支持:如果你用的是Springfox这类Swagger实现,直接在接口方法中返回
ResponseEntity<ParametrizedClass<MyClass>>,框架会自动解析泛型类型并生成对应的文档;也可以用@ApiModel注解配合@ApiModelProperty手动指定泛型的具体类型。
内容的提问来源于stack exchange,提问作者daniel-lopez
相关产品推荐
相关产品推荐

