我可以在 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
最佳答案
通过将你的类定义为
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
已经定义它是一个实现可比接口(interface)的类型。
例子
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>
界面。
关于java - 声明迭代器<?扩展 E & Comparable<? java 中的 super E>> 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046032/