5

クラスのフィールドがnullに設定されないようにするためのクリーンで安全な方法を探しています。フィールド値をクラスコンストラクターで一度設定し、後で変更しないようにしたいと思います。彼はC#の読み取り専用キーワードでこれを許可していると思います。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

4 に答える 4

16

次のように宣言barしますfinal

private final Object bar;
于 2009-06-09T14:40:44.020 に答える
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;
   }
}

バーを変更できなくなりました

于 2009-06-09T14:40:45.550 に答える
6

前の答えは両方とも正しいですが、pBarをnullに設定することもできます。

new foo(null);

したがって、最終的な答えは、finalキーワードを使用し、pBarがnullでないことを確認することです(以前のように)。

public class Foo
{
   private final Object bar;

    public Foo(Object pBar)
    {
        if (pBar == null)
        {
           bar = new Object();
        }else{
           bar = pBar;
        }
     }
 }
于 2009-06-09T14:45:33.057 に答える
1

フィールドをfinalとして宣言したい、例えば

private final Object foo;

これには、コンストラクターの終了後にフィールドが初期化されることが保証されているという追加の利点があります。

これは、オブジェクトを別のオブジェクトに置き換えることを防ぐだけであることに注意してください。C / C ++のconstとは異なり、セッターなどのオブジェクトのメソッドによるオブジェクトへの変更を防ぐことはできません。

于 2009-06-09T14:45:53.197 に答える