带有字段的Java对象实例化

带有字段的Java对象实例化,java,object,instantiation,Java,Object,Instantiation,我们可以在实例化类的同一行中初始化类的字段吗 public class LinkedQueueOfStrings { private Node first; private Node last; private class Node { private String element; private Node next; } public void enqueue(String s) {

我们可以在实例化类的同一行中初始化类的字段吗

public class LinkedQueueOfStrings {

    private Node first;
    private Node last;

    private class Node
    {
        private String element;
        private Node next;
    }

    public void enqueue(String s)
    {
        last.next = new Node(){element = s};
        //Is there a way  can do like this??
    }

}
我们有没有办法这样做

last.next = new Node(){first = s};
假设我们没有使用元素初始化节点的构造函数?

您可以这样做(如果
s
是最终的):

这相当于:

last.next = new Node() {
    {
        element = s;
    }
};
这是一个带有初始值设定项(实际上是构造函数)的匿名类

但这可能会在以后导致问题-例如,对象的类型不是
Node
,而是
LinkedQueueOfString$1
(或任何匿名类被调用的类型),它扩展了
Node

您可能只需要编写一个构造函数,或者单独设置字段:

last.next = new Node();
last.next.element = s;

我认为正确的实现方法是提供相应的构造函数:

private static class Node {
        public Node(String element, Node next) {
            this.element = element;
            this.next = next;
        }

        private String element;
        private Node next;
    }
或者,如果有许多字段需要初始化,则可以使用。
还要注意的是,您的
节点
类可以是
静态的
,因为它不需要封闭类实例,只需要占用多余的内存。

不是真的,
字符串
不是
节点
private static class Node {
        public Node(String element, Node next) {
            this.element = element;
            this.next = next;
        }

        private String element;
        private Node next;
    }