0

重複の可能性:
Javaのセッターとゲッターのポイントは何ですか?

setメソッドについて質問があります。可能であれば、詳細をお知らせください。クラス名でsetメソッドを使用する理由を知りたいです。

public class Mymainclass {

Private class ClassC {

Private Mysecondclass sec = null;

public void setMymainclass(Mysecondclass second){

        Mymainclass.sec= second;
     }
   }
}

秒変数値を設定するだけですか?はいの場合、なぜセット付きのクラス名があるのですか?

4

4 に答える 4

1

まず、適切な方法に従う場合は、メソッドを「setSeconds」と呼ぶ必要があります。クラスに議事録メンバーを追加すると、どれほど混乱するか考えてみてください。

セッターとゲッターをコーディングする主な理由は 2 つあります。

1つ目は純粋に実用的です。イントロスペクションと Java Bean の魔法を呼び出したい場合は、これらの規則に従う必要があります。FreeMarker のようないくつかのライブラリ/API は、クラスにゲッター メソッドとセッター メソッドがあることに絶対に依存しています。

2 つ目は、優れたデザインと関係があります。seconds という public メンバがあるとします。あなたのクラスのすべてのユーザーは、コーディングによってこれを設定できます。

instanceOfYourClass.seconds = 60;

この値に 42 秒の任意の制限を課したい場合を除いて、これは問題ありません。値を検証して最大 42 秒に設定するには、これを行うメソッドが必要です。したがって、クラスのすべてのユーザーは、コードを次のように変更する必要があります。

instanceOfYourClass.setSeconds(60);

したがって、ゲッターとセッターを最初から組み込むことで、クラス内でよりエキゾチックなことを行うための柔軟性を構築すると同時に、毎回コードを変更する必要のない安定したインターフェイスをクラス ユーザーに提供します。機能の小さな変更です。

于 2010-11-12T02:14:28.817 に答える
1

クラスの「クラスコンストラクター」と「セッターメソッド」を混同しているようです。

  • コンストラクターの主な理由は、クラス変数を初期化することです
  • セッター メソッドの主な理由は、クラス内のプライベート変数にアクセスすることです。

したがって、あなたの場合、メソッドの名前は setMainClass ではなく「setSec」にする必要があります。つまり、クラスを初期化した後にプライベート変数「sec」を変更する場合は、setter メソッドの使用を選択できます。

一方、setter メソッドを使用せず、クラスが最初に作成されたときに sec 変数を初期化することもできます。そのためには、コンストラクターを作成する必要があります。このクラスのコンストラクタは次のようになります。

 Mymainclass(Mysecondclass sec){
     this.sec = sec;
 }

この方法で、Mymainclass の新しいインスタンスを作成するとすぐに Mysecondclass オブジェクトを渡すことができます。

また、クラスにラベルを付けるときは、クラス名の各単語の最初の文字が次のように大文字になるようにしてください: MySecondClass と MyMainClass!!

于 2010-11-12T01:15:49.143 に答える
1

あなたの混乱の原因の一部は、あなたが示した例が悪いコードであるということだと思います! 引数のクラスに基づいてセッターに名前を付けるのではなく、設定するオブジェクトのプロパティに基づいて名前を付けます。たとえば、例の正規の「正しい」バージョンは次のようになります。

public class Mymainclass {

private Mysecondclass sec= null;

public void setSec(Mysecondclass second){

        this.sec= second;
   }
}

プロパティ名にマップするセッターを使用すると、UI から永続性まで、あらゆる種類の異なるフレームワークでオブジェクトを抽象的な方法で操作できます。たとえば、'sec' という名前のプロパティが特定のデータベース列にマップされていることをデータベース層に伝えると、リフレクションを使用して " setSec" という名前のメソッドを見つけて設定することができます!

'set' という名前のメソッドをたくさん持つという考えも、同じ型のプロパティがたくさんあるとき、たくさんのStrings、たくさんのs があるときなどに破綻しますBigDecimal。可能なときに「set」のみを使用し、必要なときにプロパティ名を使用するという 2 つの標準があるとしたら、それは本当に奇妙なことです。(そして、これらの「設定」のみのメソッドを非常に頻繁にリファクタリングしていることに気付くでしょう。)

于 2010-11-12T02:21:54.037 に答える
0

オブジェクト指向プログラミングでは、メンバー変数を public にする代わりに、getter と setter を公開して、他のクラスがクラスのコンテンツと対話できるようにすることをお勧めします。

ほとんどの場合、少なくともクラスの最初のバージョンでは、実際の割り当てステートメントよりも多くはありませんが、これにより、後で他の動作を追加できます。

  • ロギング トレースを追加して、新しい値がいつ、どのように設定されたかを知る
  • 実際に割り当てる前に、渡された値に対していくつかの制御/変換を行います (他のクラスが null を提供した場合はどうなりますか?)
  • この新しい割り当てが完了したときに必要になる可能性のある他のアクションをトリガーします
  • ...
于 2010-11-12T01:10:02.497 に答える