这很好......
public class someClass {
private Set<Element> pre;
public void someMethod() {
pre.add(new Element());
}
}
但这不是......
public class someClass {
public void someMethod() {
Set<Element> pre;
pre.add(new Element());
}
}
后一种情况的正确语法是什么,而不只是把它变成前者?
答案 0 :(得分:10)
在这两种情况下,您都缺少Set
的初始化,但在第一种情况下,它默认初始化为null
,因此代码将编译,但会抛出NullPointerException
当您尝试向Set
添加内容时。在第二种情况下,代码甚至不会编译,因为在访问之前必须为局部变量赋值。
您应该将两个示例都修复为
private Set<Element> pre = new HashSet<Element>();
和
Set<Element> pre = new HashSet<Element>();
当然,在第二个示例中,Set
是someMethod()
的本地,因此此代码中没有任何意义(您正在创建一个您从未使用过的本地Set
)
HashSet
是您可以使用的Set
的一个实现。还有其他人。如果您事先知道将添加到Set
的不同元素的数量,则可以在构造Set
时指定该数字。它会提高Set
的性能,因为它不需要重新调整大小。
private Set<Element> pre = new HashSet<Element>(someInitialSize);