您好,我正在编写链表数据类型。我有一个内部类节点,用于存储元素和后继节点。我目前在使用节点中的 getElement 和列表中的 get 方法时遇到问题。 这是我在节点中的 getElement
public E getElement(){
return this.element;
}
其中element是E元素声明的实例变量。但是,当我尝试像这样在我的 gets 方法中返回它时
public E get(int index){
Node current;
if(index < 0 || index >= size)
throw new IndexOutOfBoundsException();
if(index == 0)
return head.getElement();
else{
current = head;
for(int i = 0; i< index; i++){
current = current.getSuccessor();
}
return current.getElement();
}
}
我收到无法从对象转换为类型 E 的错误。我可以绕过它并将其类型转换为 E,但我觉得我缺少关于泛型的一些基本内容。如果您猜到这是为了家庭作业,那么您是对的,在此先感谢您。
最佳答案
你可能想要 Node
也是通用的,所以你有
public E get(int index){
if(index < 0 || index >= size)
throw new IndexOutOfBoundsException();
Node<E> current = head;
for(int i = 0; i < index; i++) {
current = current.getSuccessor();
}
return current.getElement();
}
(同时我稍微简化了您的代码。特别是,在您实际需要它们的时候声明变量是个好主意。)
Node<E>
看起来像这样:
class Node<E> {
private final E element;
private Node<E> successor;
public Node(E element) {
this.element = element;
}
// etc
}
关于java - 返回时泛型如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9060681/