如何正确实现Transformer泛型接口,完成Person到Subscriber列表转换?
正确实现Transformer泛型接口的PersonSubscriberTransformer类
现有泛型接口定义
public interface Transformer<FROM, TO> { TO transform(FROM value); }
你的错误实现问题
你当前的PersonSubscriberTransformer类错误使用原始类型实现Transformer,还额外定义了未使用的泛型参数<FROM, TO>,导致重写transform方法只能用Object类型,无法直接指定List<Person>作为参数、List<Subscriber>作为返回值,从而触发方法签名不匹配的错误。
错误代码:
public class PersonSubscriberTransformer<FROM, TO> implements Transformer { private Predicate<Person> predicate; public PersonSubscriberTransformer(Predicate<Person> predicate) { this.predicate = predicate; } @Override public Object transform(Object value) { return null; } }
正确实现方案
核心修正点
- 移除类上多余的
<FROM, TO>泛型参数,直接指定实现Transformer<List<Person>, List<Subscriber>>,明确接口的泛型类型 - 重写
transform方法时,使用具体的List<Person>参数和List<Subscriber>返回值 - 实现Person到Subscriber的转换逻辑
完整正确代码
import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class PersonSubscriberTransformer implements Transformer<List<Person>, List<Subscriber>> { private Predicate<Person> predicate; public PersonSubscriberTransformer(Predicate<Person> predicate) { this.predicate = predicate; } @Override public List<Subscriber> transform(List<Person> personList) { // 过滤符合条件的Person并转换为Subscriber集合 return personList.stream() .filter(predicate) .map(this::convertToSubscriber) .collect(Collectors.toList()); } // 自定义Person到Subscriber的转换方法,根据实际业务调整字段映射 private Subscriber convertToSubscriber(Person person) { Subscriber subscriber = new Subscriber(); subscriber.setId(person.getId()); subscriber.setName(person.getName()); // 补充其他字段的转换逻辑 return subscriber; } }
说明
通过明确指定Transformer接口的具体泛型类型,让transform方法的签名与接口定义完全匹配,既满足了参数和返回值的类型要求,也符合Java泛型的实现规范,不会再出现方法签名不匹配的错误。
内容的提问来源于stack exchange,提问作者Ballazx
相关产品推荐
相关产品推荐

