简体   繁体   English

声明迭代器 <? extends E & Comparable<? super E> &gt; Java中的迭代器

[英]declaring Iterator<? extends E & Comparable<? super E>> iterator in java

Can I declare the following in Java? 我可以用Java声明以下内容吗?

public class NewIterator<E extends Comparable<? super E>> implements Iterator<E> {
    NewIterator(Iterator<? extends E & Comparable<? super E>> iterator){
        ...
    }

I am getting an error saying 我说错了

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

By defining your class as 通过将您的班级定义为

class NewIterator<E extends Comparable<? super E>> implements Iterator<E> {

you say that E has to implement Comparable<? super E> 您说E必须实现Comparable<? super E> Comparable<? super E> . Comparable<? super E>

Now in the constructor you try to repeat that and allow subtypes of E. 现在,在构造函数中,您尝试重复该操作并允许E的子类型。

NewIterator(Iterator<? extends E & Comparable<? super E>> iterator){
    ...
}

If you do just 如果你只是做

public NewIterator(Iterator<? extends E> iterator) {

}

You should get what you want because E already defines that it's a type that implements the comparable interface. 您应该得到想要的东西,因为E已经定义它是实现可比较接口的类型。

Example

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);
}

If you use PositiveNumber in NewIterator<E extends Comparable<? super E>> 如果在NewIterator<E extends Comparable<? super E>>使用PositiveNumberNewIterator<E extends Comparable<? super E>> NewIterator<E extends Comparable<? super E>> you can replace E by PositiveNumber . NewIterator<E extends Comparable<? super E>>您可以将E替换为PositiveNumber So your constructor accepts Iterator<? extends PositiveNumber> 所以您的构造函数接受Iterator<? extends PositiveNumber> Iterator<? extends PositiveNumber> . Iterator<? extends PositiveNumber> You can now create an iterator over any subclass of PositiveNumber but since that class inherits from PositiveNumber it must also inherit the Comparable<IntegerNumber> interface. 现在,您可以在PositiveNumber任何子类上创建一个迭代器,但是由于该类继承自PositiveNumber因此它还必须继承Comparable<IntegerNumber>接口。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM