1

これは悪いパターンだと思います。それを修正するための最良の方法は何ですか?

つまり、誰もが2つの引数を持つコンストラクターを使用することを望んでいますが、引数なしでクラスロードするリスナーを実装しているため、デフォルトのコンストラクターを残す必要があります。デフォルトのコンストラクターを、それを使用するリスナーハンドラー以外の誰にも隠し、インスタンス化するための一意のポイントを作成したいと思います。

注釈のようなものはありますか?特定のクラスのプライバシー修飾子 (システム呼び出し元は同じパッケージにありません)?

4

2 に答える 2

1

これは私には問題ないようです。単体テスト中にクラスを別の方法でインスタンス化する場合は、同じことを行います。

おお、Protected よりも多くのアクセス権を持ち、public よりもアクセス権が少ないコンストラクタが必要だと思います。残念ながら、それは不可能です。

于 2012-09-07T21:13:37.940 に答える
1

空のコンストラクターを使用する必要があるクラスMyClassとリスナーの両方を同じパッケージに入れることができます。MyListener次に、空のコンストラクターのアクセスをpackage-levelに設定します。

package com.stackoverflow.foo;

public class MyClass {
  MyClass () {  // package-private (no explicit access modifier) 
  }

  public MyClass(int a, int b) {  // public
  }
}

package com.stackoverflow.foo;

public class MyListener {
  private MyClass ref = new MyClass(); // MyListener is on the same package as MyClass, so this is valid
}

このようにして、同じパッケージにあるクラスのみがMyClassデフォルトのコンストラクターを使用できるようにします。

于 2012-09-07T21:16:43.603 に答える