0

習慣の一形態として、私は通常、テストやJavaプロジェクトでの使いやすさのために静的メソッドに物事を保持することを避けています。ただし、これまでは、クラスの非静的インスタンスを作成する方法が1つしかないため、メインクラスを中心に静的メソッドと非静的メソッドを組み合わせて使用​​する必要がありました。通常、これは各メソッドのクラスメソッドをロードするのではなく、グローバル変数として行います。

たとえば、クラスMainGUIとProjMainがあるとします。ProjMainでは、グローバル変数を使用します。

private MainGUI gui = new MainGUI();

これは非常にうまく機能しますが、MainGUIクラスからアクセスしたいProjMainクラス内にメソッドがある場合は、当然同じことを行います。

private ProjMain project = new ProjMain();

ここでは、StackOverflowErrorを作成します。グローバルメソッドではなく、個々のメソッドに変数を配置することなく、クラスのインスタンスを変数として取得する簡単な方法はありますか?

4

2 に答える 2

2

ホバークラフトのソリューションはかなり良いです、ここに私はあなたのために別のものを持っています:

相互に参照するクラスがたくさんある場合は、それらの上位レイヤーを抽出することを検討する必要があります。上位レイヤークラスは次のようになります。

class HigherLayer {
    public void dosomething(ProjMain pm, MainGUI  mg){
         pm.hello(mg);
         mg.bye(pm);
    }
}

また、ProjMainとMainGUIからグローバル変数を削除して、結合を少なくします。

于 2013-03-02T05:35:55.037 に答える
1

あなたのクラスにはお互いへの参照があり、これは問題ありませんが、それぞれが他方への新しい参照を作成する場合はそうではありません。これは、一方が他方のインスタンスを作成し、最初のインスタンスを作成することで無限再帰を引き起こすだけだからです。 、他のインスタンスを作成し、最初のインスタンスを作成し、他のインスタンスを作成します、.....など..

これを解決するには、一方のオブジェクトにもう一方のオブジェクトを作成させますが、コンストラクターまたはセッターメソッドを介してそれ自体の参照をもう一方に渡すだけです。

たとえば、ファーストクラス:

public class FirstClass {
   private SecondClass secondClass;

   public FirstClass() {
     secondClass = new SecondClass(this);
}

および他のクラス

public class SecondClass {
   private FirstClass firstClass;

   public FirstClass(FirstClass firstClass) {
     this.firstClass = firstClass;
}
于 2013-03-02T05:22:09.553 に答える