我们可以在实例化同一行中初始化类的字段吗?
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};
假设我们没有用元素初始化节点的构造函数?
答案 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
,因为它不需要包含类实例,只需占用过多的内存。