如何确保Java类中的字段永远不会为null

时间:2009-06-09 14:39:15

标签: java null field

我正在寻找一种干净安全的方法来确保类的字段永远不会被设置为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

}

4 个答案:

答案 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不同。