Java Generics compilation error: incompatible types: Item#1 cannot be converted to Item#2
Java Generics compilation error: incompatible types: Item#1 cannot be converted to Item#2
我正在构建自己的 集合 class 在 Java 中实现 Iterable
接口。但是,我收到一个编译错误:
Nikolass-MacBook-Pro:week2 nburk$ javac Deque.java
Deque.java:115: error: incompatible types: Item#1 cannot be converted to Item#2
Item currentItem = current.item;
^
where Item#1,Item#2 are type-variables:
Item#1 extends Object declared in class Deque
Item#2 extends Object declared in class Deque.DequeIterator
1 error
以下是我的代码的相关部分:
public class Deque<Item> implements Iterable<Item> {
// return an iterator over items in order from front to end
public Iterator<Item> iterator() {
return new DequeIterator<Item>();
}
private class DequeIterator<Item> implements Iterator<Item> {
public DequeIterator() {
}
public Item next () {
Item currentItem = current.item; // this line causes the ERROR
current = current.next;
return currentItem;
}
}
}
我认为这个问题在某种程度上是由于我以错误的方式使用了泛型,我的 Item
声明可能不正确。但是,我将我的实现与 this quick tutorial 进行了比较,没有发现任何可能导致我这边出现问题的差异。有人知道我遗漏了什么吗?我该如何消除错误?
在
private class DequeIterator<Item> implements Iterator<Item> {
public DequeIterator() {
}
}
您正在声明一个名为 Item
的 new 类型变量。您没有重用用 Deque<Item>
声明的那个。这些可能是不同的类型。相反,去掉参数声明
private class DequeIterator implements Iterator<Item> {
据推测,current.item
是对 Deque
中声明的 Item
类型对象的引用,但您试图将其分配给 Item
类型的变量] 在 DequeIterator
.
中声明
您还需要删除 DequeIterator
的参数化,因为它不再是通用的。所以,例如
return new DequeIterator<Item>();
更改为
return new DequeIterator();
我正在构建自己的 集合 class 在 Java 中实现 Iterable
接口。但是,我收到一个编译错误:
Nikolass-MacBook-Pro:week2 nburk$ javac Deque.java
Deque.java:115: error: incompatible types: Item#1 cannot be converted to Item#2
Item currentItem = current.item;
^
where Item#1,Item#2 are type-variables:
Item#1 extends Object declared in class Deque
Item#2 extends Object declared in class Deque.DequeIterator
1 error
以下是我的代码的相关部分:
public class Deque<Item> implements Iterable<Item> {
// return an iterator over items in order from front to end
public Iterator<Item> iterator() {
return new DequeIterator<Item>();
}
private class DequeIterator<Item> implements Iterator<Item> {
public DequeIterator() {
}
public Item next () {
Item currentItem = current.item; // this line causes the ERROR
current = current.next;
return currentItem;
}
}
}
我认为这个问题在某种程度上是由于我以错误的方式使用了泛型,我的 Item
声明可能不正确。但是,我将我的实现与 this quick tutorial 进行了比较,没有发现任何可能导致我这边出现问题的差异。有人知道我遗漏了什么吗?我该如何消除错误?
在
private class DequeIterator<Item> implements Iterator<Item> {
public DequeIterator() {
}
}
您正在声明一个名为 Item
的 new 类型变量。您没有重用用 Deque<Item>
声明的那个。这些可能是不同的类型。相反,去掉参数声明
private class DequeIterator implements Iterator<Item> {
据推测,current.item
是对 Deque
中声明的 Item
类型对象的引用,但您试图将其分配给 Item
类型的变量] 在 DequeIterator
.
您还需要删除 DequeIterator
的参数化,因为它不再是通用的。所以,例如
return new DequeIterator<Item>();
更改为
return new DequeIterator();