[英]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>>
使用PositiveNumber
, NewIterator<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.