我正在尝试实现一个服务,其目的是获取一个对象并返回某个泛型参数t的示例。我目前正在返回一个基于所提到对象的实际类的解析器接口示例。解析器使用类的一个示例并返回t。
public interface Resolver<S, T> {
T resolve(S s);
}
public abstract class ResolverService<T> {
private final Map<Class<?>, Resolver<?, T>> resolvers;
public ResolverService(List<Resolver<?, T>> resolvers) {
this.resolvers = resolvers.stream().collect(Collectors.toMap(this::getResolverSourceClass, Function.identity()));
}
public Resolver<?, T> getResolver(Class<?> clazz) {
return resolvers.get(clazz);
}
private Class<?> getResolverSourceClass(Resolver<?, T> resolver) {
Type[] genericInterfaces = resolver.getClass().getGenericInterfaces();
for (Type genericInterface : genericInterfaces) {
if (genericInterface instanceof ParameterizedTypeImpl && Resolver.class.isAssignableFrom(((ParameterizedTypeImpl) genericInterface).getRawType())) {
return (Class<?>) ((ParameterizedTypeImpl) genericInterface).getActualTypeArguments()[0];
}
}
throw new IllegalStateException();
}
}
@Service
public class TargetResolverService extends ResolverService<Target> {
@Autowired
public TargetResolverService(List<Resolver<?, Target>> resolvers) {
super(resolvers);
}
}
@Component
public class Test {
@Autowired
private TargetResolverService targetResolverService;
public Target getTarget(Object object) {
return targetResolverService.getResolver(object.getClass()).resolve(object);
}
}
我的问题是在测试类中遇到以下编译器错误:
java:不兼容的类型:java.lang.object无法转换为捕获#1 of?
我理解它为什么不编译,但是我不知道如何使它工作(或者如果可能的话)。我已经尝试让getresolver方法接受class并返回resolver<s,t>的示例,但是它不起作用。我知道我可以让接口接受对象而不是s,但是这不是我想做的事情。
暂无答案!
目前还没有任何答案,快来回答吧!