2011-07-13 35 views
0

是否有可能通過整個主類存在主類的實例的範圍?我試圖從我的對象類中運行方法,但方法在主類中。 簡化主類看起來像這樣如何使整個類中存在Main類的實例的範圍

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

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

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

現在,如果我想打電話從對象的方法public void變化,我通常只使用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(this)而不是new Foo()會很容易。這被稱爲控制反轉。

另一種方法實際上會引入一個全局變量。這種模式被稱爲單身模式。 在這裏找一個實現:(第一次打穀歌) http://radio-weblogs.com/0122027/stories/2003/10/20/implementingTheSingletonPatternInJava.html

相關問題