7

一部の Java クラスは、正しく機能するために、パブリックの getter と setter を持つプライベート プロパティを持つ必要があります。たとえば、JSF Bean と JPA エンティティにはそれらが必要です。これらのライブラリがなければ、getter や setter を持たないプロパティがいくつかあるはずです。また、多くの場合、空のコンストラクターはカスタム コードで使用することをお勧めしません。例えば

@Entity
public class MyEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    public MyEntity() {}

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

このクラスでは、メソッド setId を手動コードで呼び出すことはできません。ただし、このメソッドは非推奨ではないため、@Deprecated アノテーションは間違っています。

@Deprecated 以外に、メソッドを使用しないように指示する方法はありますか?

4

2 に答える 2

3

JPA エンティティには、パブリックのゲッターとセッターは必要ありません。値はリフレクションを使用して設定されます (少なくとも、おそらく使用している EclipseLink または Hibernate を使用している場合)。

この特定の例では、単にセッターを省略できます。私はそれを習慣にしており、問題はありませんでした。注: プロパティと getter/setter に関しては、Java の命名規則に従ってください。一部のライブラリ/フレームワーク (誤って imo) はこれに依存しています。

質問のグローバルな概念に関しては、ドキュメンテーションを含む提案が見られなかったことに驚いています。ドキュメンテーションは、これまでも、そしてこれからも、コードのユーザーとの最大のコミュニケーションです。

/**
 * WARNING! DO NOT USE THIS UNLESS YOU ARE GOD!
 * This will probably break stuff unless...
 * ....
 */
public void doEvilHackishThings()
{
    // Stuff happens here.
}

コードを適切に文書化すれば、開発者はいつ何かを壊す可能性があるかを知ることができます。ブードゥー教のコードなどを適用しないように注意してください。良いドキュメントには、それが何をどのように行うのかが詳細に説明されています。正気の開発者は、なぜそれが悪いのかを理解せずにサンプル メソッドに触れることはありません。

于 2013-03-07T21:09:28.617 に答える
0

その具体的なクラスによってサポートされるインターフェイスを使用して、ゲッターとセッターを非表示にすることができます。インターフェイスで使用できるゲッターがないため、これはまた、Tell, don't ask を奨励します。コンストラクターの使用法は、ファクトリで非表示にすることもできます。

于 2013-03-07T19:13:02.670 に答える