[英]Java generics , bound mismatch: The type is not a valid substitute for the bounded parameter
[英]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 IView
, IRefreshPostViewCallback extends IView
了IRefreshPostViewCallback
> 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
,將AbstractViewModel
的extends
子句中的type參數更改為R1
,而不是IRefreshPostViewCallback
。
public abstract class RefreshPostViewModel<R1 extends IRefreshPostViewCallback>
extends AbstractViewModel<R1>
這樣可以消除錯誤。
這將在ViewModelHelper
傳遞正確的T
而不是R
是RefreshPostViewModel<IRefreshPostViewCallback>
,您將使用RefreshPostViewModel<T>
實現邊界。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.