java - 返回时泛型如何工作?

标签 java generics

您好,我正在编写链表数据类型。我有一个内部类节点,用于存储元素和后继节点。我目前在使用节点中的 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/

相关文章:

java - 安卓 : Is it possible to inherit from MainActivity class?

java - Files.probeContentType 的替代方案?

java - 通过 varargs 参数可能造成的堆污染

java - Java 泛型的 'E' 、 'T' 和 '?' 有什么区别?

java - 从 Azure key 保管库获取 secret

java - poi API 创建的 Excel 文件 : data is there but only one row is viewable?

java - 如何在 Google 开发者控制台中更改目录

java - 泛型类型的序列化 - GWT

java - 使用泛型时避免强制转换

c# - AddRange 授予公众访问列表的权限