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 实例并且只占用多余的内存。
我们可以在实例化它的同一行中初始化一个 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 实例并且只占用多余的内存。