6

コードをより適切に整理するのに役立つため、引数をデフォルトのコンストラクターに入れる代わりにセッターを使用するようになりました

問題は、私が行っているプロジェクトの唯一の変数が文字列であり、宣言で初期化する必要があるかどうか (グローバル変数として?)、セッター インスタンス メソッドで初期化する必要があるかどうか、またはクラス コンストラクタ。

セッターが使用されるまでインスタンスが初期化されないかどうかにかかわらず、このセットアップに関して問題がある可能性があるかどうか疑問に思っています:

class MyClass{

  private String myString; 

  public MyClass(){

  }
  public void setStuff(String s){ 

    this.myString=s;
  }
}
4

5 に答える 5

7

次のように初期化しないのはなぜですか:

private String myString = "My string";

可能な限り簡単な方法。

于 2012-09-26T19:12:58.360 に答える
3

まあ、それは本当にその変数が何であるか、そしてそれが何をしようとしているのかに依存します.

定数ですか?その場合、次のように初期化できます。

private final String myString = "foo";

インスタンス変数であることを意味していますか?もしそうなら、あなたは次のようなものに行くべきです:

public MyClass(string myString)
{
    this.myString = myString;
}

それがある種のオプションのプロパティである場合は、現在の方法でも問題ない可能性があります。最終的には、その変数を使って何をするかによってすべてが決まります。

于 2012-09-26T19:14:53.837 に答える
2

グローバル変数の意味がわからない? 作成されるオブジェクトに関係なく、本当に同じ変数ですか? もしそうなら、それは静的であるべきです

private static String myString = "str";

変更されない場合は、最終的なものであり、グローバル定数です

public static final String MY_STRING = "str";

これは公開され、次の方法でアクセスできます

MyClass.MY_STRING

作成されたクラスの各オブジェクトにのみ適用される場合は、コンストラクターまたは宣言で初期化します

于 2012-09-26T19:14:54.627 に答える
1

あなたが持っているのと同じように、私には似合います。ところで、「グローバル変数」は誤解を招く可能性があります。これは、変数がパブリックであるのに対し、プライベートであるがパブリックゲッター/セッターを介して外部からアクセスできることを意味する可能性があるためです。

ただし、文字列を初期化する最も簡単な方法は次のとおりです。

private String foo = "some string";
于 2012-09-26T19:15:29.480 に答える
0

それは本当に何MyClassをするかによって異なります。ほとんどの場合、プライベート変数を初期化するコンストラクターを用意し、そのためのゲッターとセッターも用意することをお勧めします。

理由の 1 つは、初期化が必要なMyClassメソッドがあり、呼び出すのを忘れた場合です。foomyStringsetStuff

于 2012-09-26T19:14:58.463 に答える