簡體   English   中英

Java泛型:綁定不匹配:類型不是該類型的bounded參數的有效替代

[英]Java generics: Bound mismatch: The type is not a valid substitute for the bounded parameter of the type

我面臨以下問題:

我有這些類和接口定義

public abstract class ViewModelRefreshPostListFragment<T extends IRefreshPostViewCallback, R extends RefreshPostViewModel<T>>
    extends RefreshPostListFragment implements IRefreshPostView {

    private final ViewModelHelper<T, R> mViewModeHelper = //error here
        new ViewModelHelper<>(); 

...
}

public abstract class RefreshPostViewModel<R1 extends IRefreshPostViewCallback> extends AbstractViewModel<IRefreshPostViewCallback> {}

public class ViewModelHelper<T extends IView, R extends AbstractViewModel<T>> {}

public abstract class AbstractViewModel<T extends IView> {}

public interface IRefreshPostViewCallback extends IView {}

Eclipse仍然給我這個錯誤:綁定不匹配:類型R不是有效替代參數<R extends AbstractViewModel<T>>ViewModelHelper<T,R>類型的<R extends AbstractViewModel<T>>

基於Java繼承,我創建了以下2條鏈:

ViewModelRefreshPostListFragment類定義中的“鏈”
1) R extends RefreshPostViewModel<T> -> R extends RefreshPostViewModel<R1 extends IRefreshPostViewCallback> -> R extends AbstractViewModel<IRefreshPostViewCallback>
1.1) T extends IRefreshPostViewCallback
1.2)將T (來自RefreshPostViewModel<T> )替換為<R1 extends IRefreshPostViewCallback>來自1.1)和1.2的一致結果,因此T參數應為OK。

ViewModelHelper類定義中的“鏈”
2) R extends AbstractViewModel<T>
2.1) T extends IViewIRefreshPostViewCallback extends IViewIRefreshPostViewCallback > T可以被IRefreshPostViewCallback替換

如果我在1.1)&& 1.2)上應用2.1),則參數T是一致的

從1)開始跟隨R extends AbstractViewModel<IRefreshPostViewCallback>從2)開始跟隨R extends AbstractViewModel<T>和從2.1)開始跟隨T可以被IRefreshPostViewCallback替換,如果我正確理解了這些內容,則不應出現此錯誤,有人可以向我解釋,為什么eclipse給我錯誤?

謝謝!

錯誤消息來自R不在其范圍內的事實。

無論R1到底是什么,您的ViewModelHelper類都可以擴展AbstractViewModel<IRefreshPostViewCallback>

在類ViewModelHelper ,將AbstractViewModelextends子句中的type參數更改為R1 ,而不是IRefreshPostViewCallback

public abstract class RefreshPostViewModel<R1 extends IRefreshPostViewCallback>
    extends AbstractViewModel<R1>

這樣可以消除錯誤。

這將在ViewModelHelper傳遞正確的T 而不是RRefreshPostViewModel<IRefreshPostViewCallback> ,您將使用RefreshPostViewModel<T>實現邊界。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM