2011-07-13 5 views
0

メインクラスのインスタンスのスコープをメインクラス全体に存在させることは可能ですか?私はオブジェクトクラスからメソッドを実行しようとしていますが、メソッドはメインクラスにあります。 単純化されたメインクラスは、このメインクラスのインスタンスのスコープをクラス全体を通して作成する方法

public static void main (String[] args) 
{ 
    MyMain x = new MyMain(); 
} 

    public void change() 
{ 
    System.out.println("whatever"); 
} 

    MyMain() 
{ 
    System.out.println("--1--"); 
} 

私はオブジェクトからメソッド公共ボイド変更を呼び出すしたい場合は今、私は通常ちょうど(x.changeを使用する)のように見えます。またはMyMain.x.change; xの範囲は明らかにオブジェクトに到達していません。 MyMain x = new MyMain();と言うだけでオブジェクトのスコープを大きくする方法はありますか?一度?

答えて

2

XA静的変数行います

private static MyMain x = new MyMain(); 

または変更機能は、静的にすると、あなたはそれを呼び出すためにインスタンスを必要としません:

public static void change() { ... 
+0

ありがとうございます。 – Damokles

0

私はへの依存関係として、メインオブジェクトを渡します他のオブジェクト。あるいは、インタフェース(IChangeableのようなもの)を分離し、実際のオブジェクトの代わりにそれを渡すようにしてください。あなたが主な目的のスコープを成長させるためのオプションにあなたが持っているSingleton

0

作ることができます回避策として

。そこからメソッドを呼び出す必要があるすべてのオブジェクトにMyMainへの参照を渡すか、MyMainを保持する静的変数を追加します。

おそらく他のすべてのオブジェクトが作成されるため、最初のアプローチは簡単に実行できます。だからnew Foo()の代わりにnew Foo(this)と書くのは簡単でしょう。これは、Inversion of Controlと呼ばれています。

他の方法では、実際にはグローバル変数が導入されます。このパターンはシングルトンパターンと呼ばれます。 実装についてはこちらをご覧ください(Googleからの最初のヒット) http://radio-weblogs.com/0122027/stories/2003/10/20/implementingTheSingletonPatternInJava.html

関連する問題