- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我遇到了以下问题:
我有这些类和接口(interface)定义
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 仍然给我这个错误:绑定(bind)不匹配:类型 R
不是有界参数的有效替代 <R extends AbstractViewModel<T>>
类型 ViewModelHelper<T,R>
基于 Java 继承,我创建了这两个链:
来自 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 参数应该没问题。
来自 ViewModelHelper 类定义的“链”
2) R extends AbstractViewModel<T>
2.1) T extends IView
, IRefreshPostViewCallback extends IView
-> 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
不在其范围内。
你的 ViewModelHelper
类扩展 AbstractViewModel<IRefreshPostViewCallback>
,不管怎样R1
真的是。
在类里面ViewModelHelper
,更改 extends
中的类型参数AbstractViewModel
的条款至 R1
, 而不是 IRefreshPostViewCallback
.
public abstract class RefreshPostViewModel<R1 extends IRefreshPostViewCallback>
extends AbstractViewModel<R1>
这将消除错误。
这将通过适当的 T
沿着ViewModelHelper
.而不是 R
正在RefreshPostViewModel<IRefreshPostViewCallback>
,您将使用 RefreshPostViewModel<T>
, 满足界限。
关于Java 泛型 : Bound mismatch: The type is not a valid substitute for the bounded parameter of the type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655288/
我是一名优秀的程序员,十分优秀!