java - 声明迭代器<?扩展 E & Comparable<? java 中的 super E>> 迭代器

标签 java

我可以在 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);
}

如果您使用 PositiveNumberNewIterator<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/

相关文章:

c# - iTextSharp 变音符号

java - SQLite 数据库不存在 Android

java - 回文失败

java - 如何在 Swing 的大纲 View 中搜索节点

java - 使用 Apache HttpClient,为什么我的连接超时不起作用?

java - 忽略列表中对象的特定属性

java - Java中如何实现图片跳转

java - 你能动态地重命名一个类名吗?

java - 为什么我在 Controller 中收到来自 postman 请求的空值?

java - 如何检查是否已在 Java 中创建/调用对象? ( eclipse 集成开发环境)