異なるパッケージによってアクセスされる必要のあるメソッドのデフォルトの可視性を保持することができない

私は MineSweeper を開発しています。それで私は3つのパッケージを持っています。 1.frontEnd 2.backEnd 3.mineSweeperControl。

mineSweeperControl contains an class ActionSplicer which implements ActionListener.In frontEnd I have an array of JBUTTONS and an array of ActionSplicer objects, such that splicerobj[i][j] listens to button[i][j].(one to one correspondence)

backEnd contains an array of objects such that object[i][j] has the background details of button[i][j] such as MineValue,isCellEmpty,isCellFlagged etc...

メソッド doBackgroundAction(i、j){..} は、クラスBackEndManager で定義されています。 ActionPplicer actionPerformed では、フォアグラウンドの変更が背景にも影響するように doBackgroundAction(i、j)を呼び出します。

私の問題はどこですか?

     

doBackGroundAction(i、j)は呼び出されてからパブリックにする必要があります   別のパッケージにしてください。

しかし、柔軟性を低下させる可能性があるため、誰かが属性の値を変更する可能性があるため、方法を公開することは望ましくありません。

私はfrontEndにActionSplicerオブジェクトの配列を作成しているので、クラスBackEndManagerを拡張することはできません。

したがって、doBackGroundAction(i、j)を宣言するためのガイダンスが必要です。 それは回避不可能な状況で公衆として方法を宣言するのが正しいかどうか? または、デフォルトの可視性でメソッドを保持するようにデザインを変更するにはどうすればよいですか?

0

1 答え

そのメソッドを公開しないようにするには、次のようなものがあります:

public class BackEndManager {
    protected void doBackgroundAction(int i, int j) { ... }
}

次に、メソッドが必要なときはいつでも、BackEndManagerのサブクラスを作成します(保護されているので、サブクラスはメソッドにアクセスできます)。

public class BackEndManagerSubclass extends BackEndManager {
    public void doBackgroundActionNew(int i, int j) {
        doBackgroundAction(i, j);
    }
}

これにより初期クラスは元の状態に保たれ、 BackEndManager クラスの実際の内部を「隠す」サブクラスを通して新しいメソッドを公開することができます。

Edit: I just saw this line: "I cannot extend the class BackGroundManager since I am creating an array of ActionSplicer objects in frontEnd."

BackGroundManager によって BackEndManager を意味する場合、私の考えは役に立たない。この点をもっと明確にしてください。 BackEndManager との接続は、 BackEndManager との接続が何であるかを理解していることから、 ActionSplicer mineSweeperControl

0
追加された