我可以用Java声明以下内容吗?
public class NewIterator<E extends Comparable<? super E>> implements Iterator<E> {
NewIterator(Iterator<? extends E & Comparable<? super E>> iterator){
...
}
我说错了
Multiple markers at this line
- Incorrect number of arguments for type Iterator<E>; it cannot be parameterized with arguments <? extends E, Comparable<? super E>>
- Syntax error on token ",", ; expected
- Syntax error on token "&", , expected
- Syntax error on token ")", ; expected
发布于 2013-08-04 10:26:11
通过将类定义为
class NewIterator<E extends Comparable<? super E>> implements Iterator<E> {
您说E
必须实现Comparable<? super E>
。
现在,在构造函数中,您尝试重复这一点,并允许E的子类型。
NewIterator(Iterator<? extends E & Comparable<? super E>> iterator){
...
}
如果你这么做
public NewIterator(Iterator<? extends E> iterator) {
}
您应该得到想要的东西,因为E
已经定义了它是实现可比较接口的类型。
示例
class IntegerNumber {}
class PositiveNumber extends IntegerNumber implements Comparable<IntegerNumber> {}
class OddPositiveNumber extends PositiveNumber {}
private NewIterator<PositiveNumber> newIterator;
void foo() {
Iterator<PositiveNumber> iterator = createIteratorFrom(
new PositiveNumber(1),
new OddPositiveNumber(7)
);
this.newIterator = new NewIterator(iterator);
}
如果在PositiveNumber
中使用NewIterator<E extends Comparable<? super E>>
,则可以将E
替换为PositiveNumber
。因此,构造函数接受Iterator<? extends PositiveNumber>
。现在可以在PositiveNumber
的任何子类上创建迭代器,但是由于该类继承自PositiveNumber
,所以它还必须继承Comparable<IntegerNumber>
接口。
https://stackoverflow.com/questions/18046032
复制相似问题