java泛型不兼容类型:对象无法转换为的捕获?

bybem2ql  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(225)

我正在尝试实现一个服务,其目的是获取一个对象并返回某个泛型参数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,但是这不是我想做的事情。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题