当前位置: 首页 > 知识库问答 >
问题:

如何在Java中创建包含在另一个类中的非静态类的对象?

吴哲
2023-03-14

我试图创建一个方法,反向链接列表。我有一个创建链表的类

public class LinkedList<t> {

    public class Node {
        t item;
        Node next;
    }


    private Node firstNode;

    public Node getFirstNode() { return this.firstNode; }

    public void appendToTail(t item){
        if(this.firstNode == null){
            this.firstNode = new Node();
            this.firstNode.item = item;
            return;
        }
        Node current = this.firstNode;
        while(current.next != null){
            current = current.next;
        }
        current.next = new Node();
        current.next.item = item;
    }
}

反转链表的方法在我的“Main”类中

public static LinkedList reverseLinkedList(LinkedList<Integer> l){
        LinkedList.Node current = l.getFirstNode();
        LinkedList<Integer> reverse = new LinkedList<Integer>();
        LinkedList.Node head = reverse.getFirstNode();
        while(current != null){
            LinkedList.Node newHead = new reverse.Node();
            newHead.item = current.item;
            newHead.next = head;
            head = newHead;
            current = current.next;
        }
        return reverse;
    }

对于我想添加到新反向链表前面的每个新节点,我需要创建一个“node”类的新实例,该类包含在“LinkedList”类中。“Node”类不能是静态的,因为其“item”属性设置为与“LinkedList”类型相同的泛型类型。所以,我需要一个类“LinkedList”的实例,以便访问“Node”类并创建其对象。在上面的代码中,我使用了“LinkedList”上的“reverse”实例来实现这一点。但我得到一个错误,说“包反向不存在”。这一定是因为我想把它当作一个包。我该如何解决这个问题?

我必须能够通过将“Node”类与“LinkedList”分离来解决这个问题。还有什么别的我可以不用做的吗?

共有3个答案

袁俊弼
2023-03-14

我认为将节点创建为静态节点没有问题。这样做能解决问题吗?我更改了类型参数的名称,以便更清楚地声明了什么以及何时重用现有的类型参数。

public class TestList<T> {

   private Node<T> head;

   private static class Node<X> {
      X element;
      Node<X> next;
   }

   public void add( T element ) {
      Node<T> node = new Node<T>();
      node.element = element;
      if( head != null )
         node.next = head;
      head = node;
   }

   public T get() {
      return head.element;
   }
}


class External {
   public static <Z> void reverse( TestList<Z> arg ) {
      TestList.Node<Z> temp = new TestList.Node<>();
      temp.element = arg.get();
      // etc.
   }
}
杜海
2023-03-14

如果只需要反转linkedlist,请使用Collections。reverse方法,该方法将列表作为参数,并返回反向列表。

融渊
2023-03-14

更新此行:

LinkedList.Node newHead = new reverse.Node();

,是吗

LinkedList.Node newHead = reverse.new Node();
 类似资料:
  • 问题内容: 我正在尝试开发在线酒店预订系统。我有一个主类,它从用户那里获取输入信息,例如他们的姓名,他们的付款信息和其他数据字段,并使用该信息作为对象。我有另一个名为的类,其中包含每个对象的列表。我遇到的问题是我无法找出一种将对象添加到对象列表中的方法。这是一些代码: 我不知道如何获取新对象作为类中方法的参数传递。我只是束手无策,希望有人能帮助我慢跑。 谢谢你的帮助。 问题答案: 让makeRes

  • 我希望能够访问一个非静态变量和非静态方法从另一个类,而不创建一个新的对象。 在我们项目的现有代码中,由于新对象的创建,它的创建类实例化问题。 } //Class2//这里继承的类配置是另一个类,例如Class3,它是必需的,我们不必扩展Class1,即DataBaseQueries 公共类CommonActions扩展配置{ 公共整数ecSample{G_IntSavedValueValue=EC

  • 问题内容: 我正在使用Apache Commons EqualsBuilder来为非静态Java内部类构建equals方法。例如: 除了声明方法之外,是否有可以参考的引用的语法?有点像(不起作用)? 问题答案: 没有。 最好的方法可能是您所建议的:将getFoo()方法添加到内部类中。

  • 问题内容: 考虑以下嵌套类。 问题答案: 您可以像这样声明一个对象数组。 并实例化它们,您可以在类中执行类似的操作。

  • 这是一个非常基本的OOP问题。但我对全班的行为不太清楚。所以假设我有a类: 现在,当我调用类A的方法输出: 产出将是: 附注。希望我洗清了自己的罪名。

  • 问题内容: 用Java开发一个简单的井字游戏。 我有一个名为的课程。此类应包含有用的游戏方法。游戏发生在另一个班级。 中的方法是。该方法应该将所有9个按钮(井字游戏板)上的文本设置为空白,再次将它们设置为启用,然后将变量设置为1。 这是它的代码: 是游戏主类中的JButtons数组。 该方法以前在游戏的主要类中使用。但是现在它在不同的类中,它无法到达该类中的按钮并对其进行操作。 我在中创建了get