通过将您的班级定义为
class NewIterator> implements Iterator {
你说E必须实现Comparable.
现在在构造函数中,您尝试重复该操作并允许E的子类型.
NewIterator(Iterator extends E & Comparable super E>> iterator){
...
}
如果你这样做的话
public NewIterator(Iterator extends E> iterator) {
}
你应该得到你想要的东西,因为E已经定义它是一种实现类似界面的类型.
例
class IntegerNumber {}
class PositiveNumber extends IntegerNumber implements Comparable {}
class OddPositiveNumber extends PositiveNumber {}
private NewIterator newIterator;
void foo() {
Iterator iterator = createIteratorFrom(
new PositiveNumber(1),
new OddPositiveNumber(7)
);
this.newIterator = new NewIterator(iterator);
}
如果你在NewIterator中使用PositiveNumber< E extends Comparable>你可以用PositiveNumber代替E.所以你的构造函数接受Iterator.您现在可以在PositiveNumber的任何子类上创建迭代器,但由于该类继承自PositiveNumber,因此它还必须继承Comparable< IntegerNumber>接口.