1

明確にするために、これが私が意味することです:

public Image getRespectiveImage(int temp) {
    switch(temp){
    case 1:return one;
    case 2:return two;
    case 3:return three;
    case 4:return four;
    case 5:return five;
    }
    return null;
}

に比べ

public Image getOne(){return one;}
public Image getTwo(){return two;}
public Image getThree(){return three;}
public Image getFour(){return four;}
public Image getFive(){return five;}

私はなぜか前者の方が簡単そうで好きなのですが、みんな後者を使っているようです。誰かが getter メソッドの束を使用する理由はありますか?

4

4 に答える 4

1

「どちらが良いか悪いか」ということではありません。getter を記述しているプロパティが本来インデックス化されていない場合、インデックス化された getter を記述しても意味がありません。プロパティが同じタイプでない場合、それは、インデックス付き表現が一般的に役に立たないという良い手がかりです。

使用しているプロパティがインデックス付きリストとして保存するのに意味がある場合は、必ず、フィールドに配列を使用します (考慮してください: 配列型がそのフィールドに適切でない場合は、おそらく、インデックス付きゲッターも実際には適切ではありません)。

一般に、宣言したフィールドをゲッターとセッターに反映させる必要があります。フィールドが配列型 ( JavaBeans 仕様、セクション 8.3.3に準拠) の場合は、int インデックス パラメータを取る getter/setter を使用します。

これを行う理由は 2 つあります。まず、概念レベルで、フィールドがゲッター/セッターと大きく異なる場合、これには多くの正当な理由がありますが、フィールドをどのように編成したかを調べて、リファクタリングできるかどうかを確認することをお勧めします。オブジェクトの目的をより正確に表すものに変更します (パブリックの getter/setter がこの目的の適切な表現であると想定されています)。これは、より大きな設計上の問題を示している可能性があります。

第 2 に、これは自分が何をしているのかを意識するというよりも、getter と setter が Bean で動作する API との相互作用に影響を与え、リフレクションを使用する API との相互作用にも影響を与えます。たとえば、Hibernate は、getter/setter プロパティを使用してオブジェクトをデータベースに永続化するか、フィールドに直接アクセスするように構成できます。そのため、設定によっては、少なくともゲッ​​ター/セッターとフィールドのセットアップに注意する必要があります。

ここでのポイントは次のとおりです。一方の方法が良いか悪いかを定義する一連のルールがあるという考えで、これに到達しようとしないでください。操作しているオブジェクトの性質と、それらのプロパティが実際に意味するもの (セマンティクス) を考慮して、意味のあるパブリック インターフェイスを記述します

于 2013-08-15T18:12:50.280 に答える
0

直面している問題によって異なります。「列挙」を使用してオプションを制限および文書化する場合は、最初のアプローチに問題はありません。

enum ImageCategory {
  Unchecked,
  Checked,
  Disabled;
}

Image getRespectiveImage(ImageCategory category);

すべての「カテゴリ」が同じ性質のインスタンスを表していることを確認してください。

一方で、次のようなメソッドを持つことは明らかに良いことではありません。

Object get(String property);

独自の Dictionary/Map クラスを作成している場合を除きます。

于 2013-08-15T18:11:31.290 に答える
0

ユーザーに操作させたいすべてのプライベート変数にゲッターとセッターを用意することをお勧めします。

上記のソリューションは単純化されていますが、一般的な方法ではないため、コードを操作する他の人々を混乱させるでしょう。

于 2013-08-15T18:03:22.190 に答える
0

多数の getter メソッドを使用すると、最初の方法よりも 2 つの顕著な利点があります。

  1. getter メソッドは、適切に名前が付けられている場合、オブジェクトから何を取得しているかを自己文書化します。
  2. 最初のケースでは、どの入力が return に対応するかを伝える何らかのドキュメントをユーザーに提供する必要があります。個別のゲッターがある場合、これは必要ありません。(お客様の負担が大きくなります)
于 2013-08-15T18:15:01.283 に答える