繁体   English   中英

编译时出现Java通用错误:“类型参数不在类型变量T的范围内”

[英]Java Generic error in compilation time: “type argument is not within bounds of type-variable T”

我正在开发一个代理适配器,以使用Java中的泛型将请求/响应转换为另一个请求/响应。

我有一个界面:

public interface ProxyAdapter<FROM, TO> {

    TO adapt(FROM o);
}

适配器的实现(仅以请求为例):

public interface RequestProxyAdapter<FROM, TO> extends ProxyAdapter<RequestEntity<FROM>, RequestEntity<TO>> { }

抽象类:

public abstract class ProxyAdapterResolver<U extends HttpEntity<?>, T extends ProxyAdapter<U, U>> {

   private final Map<String, T> adapters;

   private final T defaultAdapter;

   public ProxyAdapterResolver(Collection<T> adapters, T defaultAdapter) {
       this.adapters = adapters.stream()
            .collect(Collectors.toMap(this::proxyNameResolver, Function.identity()));

       this.defaultAdapter = defaultAdapter;
   }
   // other methods...
}

具体课程:

@Component
public class RequestProxyAdapterResolver extends ProxyAdapterResolver<RequestEntity<?>, RequestProxyAdapter<?, ?>> {
    @Autowired
    public RequestProxyAdapterResolver(Collection<RequestProxyAdapter<?, ?>> allAdapters) {
       super(allAdapters, a -> a);
    }
}

例外发生在编译时,进入具体类RequestProxyAdapterResolver 这是堆栈跟踪:

Error:(11, 108) java: type argument br.com.afferolab.attendancelist.core.proxy.service.RequestProxyAdapter<?,?> is not within bounds of type-variable T

obs:类RequestEntity来自org.springframework.http包

异常很明显,我确实在堆栈溢出中阅读了有关此问题的一些问题。 但是我找不到适合我的情况的解决方案。 例如:

Java泛型问题:类“不在类型变量的范围内”错误。

类型实参T不在类型变量T(Java通用)的范围内

从Java中的通用类型推断通用类型(编译时错误)

我花了大约三天时间解决这个问题。 有任何想法吗? 谢谢。

我认为问题是, RequestEntity<?>作为第一个参数和RequestEntity<?>通配符参数的隐含上限RequestProxyAdapater不被认为是完全相同的类型,但你他们都需要到键入U

我发现当我无法让泛型一起工作时,一个? extends ? extends还是? super ? super经常会修复它。 尝试这个:

public abstract class ProxyAdapterResolver<U extends HttpEntity<?>, T extends ProxyAdapter<? extends U, ? extends U>> {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM