如何让非泛型单例Bean类的方法返回泛型包装类?
解决方法
你不需要将Collector类声明为泛型类,只需要把泛型参数声明在方法级别即可。这样既可以让方法返回泛型包装类,又能保持Collector作为单例Bean的特性。
修改后的代码示例
public class Collector { RestTemplate restTemplate = new RestTemplate(); // 在方法签名前添加<T, V>声明泛型参数 public <T, V> APICallResultDto<T, V> collectData(Class<T> responseType, Function<T, V> transformer) { APICallResultDto<T, V> result = new APICallResultDto<>(); /* 模板代码实现示例 * (1) 拼接请求URL * String url = "your-api-url"; * (2) 调用API并指定响应类型 * T apiResponse = restTemplate.getForObject(url, responseType); * (3) 验证响应 * if (apiResponse == null) { * result.setSuccess(false); * return result; * } * (4) 转换数据 * V transformedData = transformer.apply(apiResponse); * result.setData(transformedData); * result.setSuccess(true); * */ return result; } }
关键说明
- 方法级泛型:在方法返回类型前添加
<T, V>,表示该方法使用这两个泛型参数,与类本身无关。这样编译器就能识别T和V,不会再报"Cannot resolve symbol"错误。 - 参数补充:为了让方法能正确处理泛型类型,通常需要传入
Class<T>来指定API响应的类型(方便RestTemplate反序列化),以及Function<T, V>来完成数据转换逻辑。这两个参数是处理泛型时的常见做法,能让方法更灵活通用。 - 单例兼容性:方法级泛型不会影响类的单例特性,因为泛型类型信息在编译时被擦除,运行时Collector实例仍然是单一的,没有状态差异。
内容的提问来源于stack exchange,提问作者timothy jeong
相关产品推荐
相关产品推荐

