您好我正在编写链表数据类型。我有一个内部类节点,我用它来存储元素和后继者。我目前在节点中的getElement和列表中的get方法遇到问题。 这是我在节点中的getElement
public E getElement(){
return this.element;
}
其中element是E元素声明的实例变量。但是,当我尝试在我的获取方法中返回它时,就像这样
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但我觉得有一些关于泛型的基本问题我缺少。如果您认为这是作业,那么您是对的,并提前感谢您。
答案 0 :(得分:9)
你可能希望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
}
答案 1 :(得分:3)
假设Node类是泛型的,就像它应该的那样,你的current
变量应该像这样声明:
Node<E> current;
head
和您可能拥有的任何其他节点也是如此。