带有字段的Java对象实例化

时间:2015-02-14 01:22:52

标签: 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)
    {
        last.next = new Node(){element = s};
        //Is there a way  can do like this??
    }

}

我们可以这样做吗,

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

假设我们没有用元素初始化节点的构造函数?

2 个答案:

答案 0 :(得分:1)

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

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

相当于:

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

这是一个带有初始化程序的匿名类(实际上是构造函数)。

但是这可能会在以后引起问题 - 例如,对象不是Node类型,它将是LinkedQueueOfString$1类型(或者无论匿名类被调用)扩展 Node

您应该只编写构造函数,或单独设置字段:

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

答案 1 :(得分:0)

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

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类可以是static,因为它不需要包含类实例,只需占用过多的内存。