仿制药在返回时如何工作?

时间:2012-01-30 07:33:26

标签: java generics

您好我正在编写链表数据类型。我有一个内部类节点,我用它来存储元素和后继者。我目前在节点中的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但我觉得有一些关于泛型的基本问题我缺少。如果您认为这是作业,那么您是对的,并提前感谢您。

2 个答案:

答案 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和您可能拥有的任何其他节点也是如此。