0

と の 2 つのクラスがAありBます。クラスAで のオブジェクトを作成しますBoneオブジェクト x 内から、datamembersおよびの値にアクセスしたいと思いますtwo。そのための唯一の解決策は、次のようなパラメーターとして渡すことです

b=new B(one,two)

?. Aクラスはフレームであり、クラスBはパネルであるため、拡張したくありません。

class A
{
    private int one;
    private String two;
    private myMethod()
    {
        B x=new B();
    }
}
4

6 に答える 6

1

いくつかの方法があります(以下でそれぞれ説明します)。

  1. パラメーターを 1 つずつ渡す
  2. フレーム全体を渡す
  3. インターフェイスを抽出し、それを渡します

広告 1. これは最も簡単な方法です。次のようなコンストラクターを使用するだけです。

public B(int one, String two) {
    ...
}

すでに述べたように、パラメーターの数が多いと面倒です。


広告 2. これは良い考えではありません。パネルは本当にフレームのすべてのプロパティにアクセスする必要がありますか? いいえ、そうではありません。たとえば、次のことができます。

public B(MyFrame a) {
    ...
    a.setVisible(false);
}

これは絶対に望ましくありません。さらに、循環参照の問題は、単独で変更を行うことができないことです。フレームを変更すると、パネルが変更される可能性があり、その逆も同様です。


広告 3. これは私の好みのアプローチです。必要な機能を正確に提供するインターフェイスを作成します。

public interface MyInterface {
    public int getOne();
    public String getTwo();
}

次に、クラスAにそのインターフェイスを実装させます。

public class A implements MyInterface {
    ...

    public int getOne() {
        return one;
    }

    public String getTwo() {
        return two;
    }
}

Bのコンストラクターをに変更することを知っています

public B(MyInterface a) {
    // use a.getOne() and a.getTwo() to get your data
}

そして、あなたはまだBから作成Aすることができます

B b = new B(this);

主な利点は次の 3 つです。

  1. 必要なすべてのデータを含むパラメーターを 1 つだけ渡す必要があります
  2. A必要以上のクラスを公開しない
  3. クラスはクラスBに明示的に依存していませんA(インターフェイスのみMyInterface)
于 2013-08-09T10:28:24.487 に答える
1

クラス A と B が別のコンポーネントである場合、別の選択肢はありません。

一方、クラス B が機能的にクラス A に属している場合、クラス B を A の内部クラスにすることができます。

public class A {

    int one;

    class B {

        private void doSomething() {
            one = one + 1;   // inside B you can access memebers of A
        }
    }
}
于 2013-08-09T10:03:26.133 に答える
0

このようにデルケアできます

    class B
   {
        private int one;
        private String two;

     // getter setters methods
   }

呼び出しフォームClass A 's myMethod()はこのようにする必要があります

private myMethod()
{
    A a = new A();
    B b = new B();
    b.setOne(A.one);
    b.setTwo(A.two);
}
于 2013-08-09T09:59:53.057 に答える
0

別の方法は次のようになります。

class B
{
   A a;
   public B(A a){
   this.a = a;
}
}

これには、クラスの属性のパブリック アクセサー メソッドが必要です。A

于 2013-08-09T10:00:20.730 に答える