Java 带字段的对象实例化

Java object instantiation with fields

我们可以在实例化它的同一行中初始化一个 class 的字段吗?

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;}};

相当于:

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

这是一个带有初始值设定项(实际上是构造函数)的匿名 class。

但这可能会在以后导致问题 - 例如对象将不是 Node 类型,它将是 LinkedQueueOfString 类型(或者匿名 class 被调用的任何类型) 扩展 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;
    }

或者如果您有 许多字段 需要初始化,您可以使用 Builder pattern。 另请注意,您的 Node class 可以是 static,因为它不需要封闭 class 实例并且只占用多余的内存。