当前位置: 首页 > 知识库问答 >
问题:

Java泛型:绑定不匹配:该类型不能有效替代该类型的有界参数

牛兴安
2023-03-14

我正面临以下问题:

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 {}

“链”来自ViewModelHelper类定义
2)r扩展AbstractViewModel
2.1)t扩展iViewirefreshPostViewCallback扩展iView->t可以用irefreshPostViewCallback替换

如果我将2.1)应用于1.1)&1.2),我们可以看到,参数T是一致的

从1)遵循r扩展AbstractViewModel 从2)遵循r扩展AbstractViewModel ,从2.1)遵循t可以被irefreshPostViewCallback替换,如果我正确理解,这个错误应该不会出现,有人能解释一下吗?为什么eclipse会给我这个错误?

谢谢!

共有1个答案

卢黎昕
2023-03-14

错误消息来自r不在其边界内的事实。

您的ViewModelHelper类扩展AbstractViewModel ,不管R1是什么。

在类ViewModelHelper中,将AbstractViewModelExtends子句中的类型参数更改为R1,而不是IrefreshPostViewCallback

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

这将消除错误。

这将在ViewModelHelper中传递正确的TR不是refreshPostViewModel ,而是使用refreshPostViewModel ,满足了界限。

 类似资料: