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

jum*_*mar 5 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

}
Run Code Online (Sandbox Code Playgroud)

eri*_*son 16

声明barfinal这样的:

private final Object bar;
Run Code Online (Sandbox Code Playgroud)


Sil*_*rom 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在吧不能改变


Pet*_*ter 6

以前的答案都是正确的,但pBar仍然可以设置为null:

new foo(null);
Run Code Online (Sandbox Code Playgroud)

所以最终的答案是使用final关键字并确保pBar不为null(如前所述):

public class Foo
{
   private final Object bar;

    public Foo(Object pBar)
    {
        if (pBar == null)
        {
           bar = new Object();
        }else{
           bar = pBar;
        }
     }
 }
Run Code Online (Sandbox Code Playgroud)