带有字段的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;
}