我正面临以下问题:
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扩展iView
,irefreshPostViewCallback扩展iView
->t
可以用irefreshPostViewCallback
替换
如果我将2.1)应用于1.1)&1.2),我们可以看到,参数T是一致的
从1)遵循r扩展AbstractViewModel
从2)遵循r扩展AbstractViewModel
,从2.1)遵循t
可以被irefreshPostViewCallback
替换,如果我正确理解,这个错误应该不会出现,有人能解释一下吗?为什么eclipse会给我这个错误?
谢谢!
错误消息来自r
不在其边界内的事实。
您的ViewModelHelper
类扩展AbstractViewModel
,不管R1
是什么。
在类ViewModelHelper
中,将AbstractViewModel
的Extends
子句中的类型参数更改为R1
,而不是IrefreshPostViewCallback
。
public abstract class RefreshPostViewModel<R1 extends IRefreshPostViewCallback>
extends AbstractViewModel<R1>
这将消除错误。
这将在ViewModelHelper
中传递正确的T
。R
不是refreshPostViewModel
,而是使用refreshPostViewModel
,满足了界限。
我得到一个错误:::绑定不匹配:类型MyClass1不是Person类型的有界参数的有效替代品
问题内容: 考虑以下代码: 排序调用给出错误: 绑定不匹配:类型为Collections的通用方法sort(List )不适用于参数(ArrayList >)。推断的类型MyItem 不是有效替代边界参数<T扩展Comparable <?超级T>> 为什么会这样呢? 如果实施该工具,那为什么不能替代呢? 抱歉,是否有人提出这个问题,但我觉得这个问题有些具体。 问题答案: 实际上,对该错误的更详细说
在了解Java泛型的过程中,我遇到了以下问题: 假设我有下面的方法来添加列表的元素,只限于包含数字的列表。 但是这段代码和这段代码有什么不同: 它们都按预期编译和执行。这两者之间有什么区别?除了语法之外?什么时候我更喜欢使用通配符而不是前者? 是的,使用通配符方法,我不能在列表中添加除null之外的新元素,否则它将无法编译。除此之外呢?
这不起作用: “绑定不匹配:类型不能有效替代类型的有界参数”
下面是一个通用搜索算法的实现: 接口: (方括号=弧形括号) 问题出在哪里?我想不通...对泛型参数T也进行了扩展。