10

インターンシップで、同僚の一人がヒントをくれました。これが良い習慣かどうか知りたいです。

私が行っていたのは、含まれる値に対してのみ使用され、実際に何かを行う関数を持たないクラスを作成することでした (ゲッター、セッター、コンストラクターを除く)。変数を次のように宣言しました。

public class ObjectIUse{
  Private String name;

  public ObjectIUse(String name){
    this.name = name;
  }

  public String getName(){
    return name;
  }
}

だから私はセッターを使っていません。私の同僚は、私もこの方法でそれを行うことができると言いました:

public class ObjectIUse{
  public final String name;

  public ObjectIUse(String name){
    this.name = name;
  }
}

public であるため getter や setter は必要ありませんが、final であるため決して変更することはできません。

どちらが良いでしょうか?それとも、非公開にするだけでなく、最終的なものにする方が望ましいのでしょうか? 明らかに、すべてのオプションが機能することを意味します。どちらが優れているのか、その理由を知りたいだけです。

4

8 に答える 8

8

変数をプライベートにします。そうすることで、変数をクラスにカプセル化することになります。これには多くの利点があります。情報の隠蔽はその 1 つです。これについては、上記のリンクにアクセスするとわかります。

作成後に変更しないようにする場合は、最終的なものにもします。

于 2013-03-28T12:49:12.237 に答える
4

Stringaは不変であるため、これが機能するようになりました。しかし、可変クラスへの参照を公開し、そのクラスがスレッドセーフでない場合はどうなるでしょうか? 必要に応じて、防御コピーを返すことさえできません。

言うまでもなく、これはカプセル化も破ります。プライベート変数とゲッターを使用します。

于 2013-03-28T12:53:01.463 に答える
1

カプセル化の原則を適切に使用するには、すべてのクラス フィールドを非公開にし、setter と getter を介してそれらにアクセスします。それ以外に、 を呼び出すときに追加のロジックを追加したい場合がありますgetName()。2 番目のバリアントが使用されることもありますが、最初のバリアントの方が適しています。お役に立てれば。

于 2013-03-28T12:51:14.230 に答える
1

どちらが良いでしょうか?それとも、非公開にするだけでなく、最終的なものにする方が望ましいのでしょうか?

開発者として成功したいのであれば、正しく、効率的に、そして最も重要なことを安全にプログラミングする必要があります。セキュリティとパフォーマンスが第一です。

公開すると、非常に重要で多くの利点を持つカプセル化が解除されます。オブジェクトのプロパティを取得したいときはいつでも、ゲッターがあなたの味方になります。

一般に、オブジェクトのプロパティに直接アクセスするべきではありません (極端な場合のみですが、これらはより良い方法で解決できます)。ゲッターとセッターは、カプセル化を維持し、オブジェクトを安全に処理するという目的のために設計されています。

final variables通常、一時的に変更できないデータに使用されます。

于 2013-03-28T12:49:48.937 に答える
1

変数にセッターメソッドを提供しないという考えは、それを読み取り専用フィールドにします。つまり、読み取りはできるが書き込みはできないことを意味するため、finalキーワードを使用して定数にすることで、すべてが要約されます。

定数の方が良いと思います。finalキーワードはパフォーマンスを向上させます。詳細はこちら

于 2013-03-28T12:50:16.373 に答える
1

必ず getter を用意して、フィールドを非公開にする必要があります。それがカプセル化と呼ばれるものです。

また、それを最終的なものにしてセッターを持たないことで、オブジェクトは不変になります。これは、並列プログラミングにとって非常に良いことです。

于 2013-03-28T12:50:48.103 に答える
1

public彼らの推論は、それを使用するとコードが単純になるということだと思います。Java は、このような状況では冗長すぎると批判されます。Javascript などの言語では、これは (通常) 常にpublic.

しかし、その単純さは、安全で安定した拡張可能なコードを持つこととのトレードオフです。

なぜそれが重要なのかを理解するには、すべてをパブリックとして記述された大規模な Javascript プロジェクトを見てください。各クラスのコードは単純かもしれませんが、それらの関係と結果として生じるアーキテクチャを維持するのは悪夢です。

于 2013-03-28T12:59:46.350 に答える
0

依存だと思います。例: getter を使用する場合は、オーバーライドできます。時々それは非常に便利です。

于 2013-03-28T13:06:42.880 に答える