泛型和迭代器的Java编译器错误

凯文

我有以下代码(是的,我知道迭代器的实现不正确。这是我正在编写的考试问题):

public class MyList<Integer> extends ArrayList<Integer> {
  public void noOdds() {
    MyIterator<Integer> iter = this.iterator();
    while (iter.hasNext()) { 
      if (iter.next() % 2 == 1)
        iter.remove();
    }   
  } 

  public MyIterator<Integer> iterator() {
    return new MyIterator<Integer>(this);
  } 

  public class MyIterator<Integer> implements Iterator<Integer> {
    List<Integer> data;
    int size;
    int position;

    MyIterator(List<Integer> data) {
      this.data = data;
      this.size = data.size();
      this.position = 0;
    } 

    public boolean hasNext() {
      if (this.position < this.size)
        return true;
      else
        return false;
    }   

    public Integer next() {
      Integer tmp = this.data.get(this.position);
      this.position++;
      return tmp;
    }

    public void remove() {
      if (this.position == 0)
        throw new IllegalStateException("next hasn't been called yet");
      this.data.remove(this.position - 1);
    }
  }
}

当我编译时,它不会自动将Integer装箱以进行模运算,然后我得到

MyList.java:9:错误:如果(iter.next()%2 == 1),二进制运算符'%'的操作数类型错误

第一种类型:整数

第二种类型:int

如果我更改iter.next()iter.next().intValue(),我得到

MyList.java:9:错误:如果(iter.next()。intValue()%2 == 1)找不到符号

符号:方法intValue()

位置:类Object

但是,如果我改变

 public class MyList<Integer>...

 public class MyList

然后错误消失了。

对正在发生的事情有什么想法?

谢谢。

Sotirios Delimanolis

这里,

public class MyList<Integer> extends ArrayList<Integer> {
                //  ^ here

您正在声明一个Integer遮盖该java.lang.Integer类型的类型变量

在您引用的类型主体内的任何位置Integer,您引用的是类型变量,而不是java.lang.Integer类型。

各种数值运算符不适用于随机类型(这是您的类型变量),它们仅适用于原始数值类型及其包装器类。因此,不能将它们与类型变量类型的操作数一起使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java泛型-编译器错误

调用泛型方法java的编译器错误

Java:递归泛型编译器错误

当我用Java迭代非泛型映射时,编译器会抱怨

解决泛型类型约束中的编译器错误

Java泛型:Eclipse中未显示编译器错误

Eclipse Java 编译器推断出错误的泛型类型?

责任链设计原理中的Java泛型编译器错误

Java泛型错误:来自命令行编译器的不可转换类型

为什么运算符<对于Java泛型有编译器错误?

使用Java泛型并将List作为方法参数的编译器错误并引发泛型异常

Java-本地类和泛型,为什么会出现编译器警告?

泛型混淆:欺骗编译器

Java迭代器和泛型类型转换

泛型和lambdas-Javac和Eclipse编译器中的不同行为

Eclipse编译器和Javac之间的差异-枚举,接口和泛型

尝试在闭包中使用泛型时发生意外的编译器错误

条件类型添加了额外的泛型编译器错误

将@SuppressWarnings(“ unchecked”)泛型添加到单行会产生eclipse编译器错误

使用 Linq exceptBy 函数的泛型类中出现奇怪的编译器错误

泛型类型扩展无效的重新声明编译器错误

Rust编译器如何在泛型中标记化“>”和“ >>”?

具有可选功能,泛型和类似功能的功能确实满足编译器要求

编译器如何推断泛型方法的类型?

声明泛型类型时的编译器警告

为什么编译器不推断泛型

流和减少的Java 8编译器错误

用于struct编译器错误向量的C ++迭代器

为什么Java编译器失去构造函数实例化轨道泛型类型的?