作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我现在有以下类层次结构:
interface Interface<T> {
boolean isGreaterThan(T other);
}
class Base implements Interface<Base> {
public boolean isGreaterThan(Base other) {
return true;
}
}
class Subclass extends Base {
... //note that I dont need to implement or overwrite isGreaterThan() here
}
class Wrapper<E extends Interface<E>> {
protected List<E> list;
...
}
class Test {
public static void main(String[] args) {
Wrapper<Subclass> = new Wrapper<Subclass>(); //This line produces the error
}
}
我收到以下错误消息:
Type parameter 'Subclass' is not within its bound; should implement 'Interface<Subclass>'
我的问题是:我如何告诉 java,接口(interface)应该接受任何扩展 T 的元素 E?或者是 Wrapper 的原因?我试过包装器:
class Wrapper<E extends Interface<? extends E>> {}
这在包装器主体中产生了错误,并且没有改变原始错误。
Wrapper<Base> wrapper = new Wrapper<Base>();
工作正常...我该怎么做
Wrapper<Subclass> wrapper = new Wrapper<Subclass>();
也工作?有没有任何 Actor 的干净方式? (允许通配符)
谢谢!
最佳答案
尝试
class Wrapper<E extends Interface<? super E>>
就像Comparable
, 它直观上是一个 'contra-variant'类型,因此在大多数情况下它应该与 <? super>
一起使用.例如Collections.sort
关于具有泛型的 Java 接口(interface)应接受子类作为类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848072/
我是一名优秀的程序员,十分优秀!