簡體   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