我正在寻找一种干净安全的方法来确保类的字段永远不会被设置为null。我希望字段值在类构造函数中设置一次,以后再也不会修改。我认为他在C#中的readonly关键字允许这样做。有没有办法在Java中做同样的事情?
class foo
{
private Object bar;
public foo(Object pBar)
{
if(pBar == null)
{
bar = new Object();
}
else
{
bar = pBar
}
}
// I DO NOT WANT ANYONE TO MODIFY THE VALUE OF bar OUT OF THE CONSTRUCTOR
}
答案 0 :(得分:16)
将bar
声明为final
,如下所示:
private final Object bar;
答案 1 :(得分:7)
您正在寻找关键字final。
class foo
{
private final Object bar;
public foo(Object pBar)
{
//Error check so that pBar is not null
//If it's not, set bar to pBar
bar = pBar;
}
}
现在无法更改栏
答案 2 :(得分:6)
之前的答案都是正确的,但pBar仍然可以设置为null:
new foo(null);
所以最终的答案是使用final关键字并确保pBar不为空(如前所述):
public class Foo
{
private final Object bar;
public Foo(Object pBar)
{
if (pBar == null)
{
bar = new Object();
}else{
bar = pBar;
}
}
}
答案 3 :(得分:1)
您希望将该字段声明为final,例如
private final Object foo;
这有额外的好处,w.r.t。并发性保证在构造函数完成后初始化字段。
请注意,这只会阻止用另一个替换对象。 它不会阻止通过对象的方法对对象进行修改,例如, setters,与C / C ++中的const不同。