2011-12-14 114 views
1

現在我有兩個.java文件。
的Main.java:讓一個構造函數訪問一個靜態變量

public class Main { 
    static int integer = 15; 
    NeedInteger need = new NeedInteger(); 
} 

和NeedInteger.java

public class NeedInteger { 
    System.out.println(integer); 
} 

這當然是非常簡單的,但有什麼辦法,我可以做到這一點?

+1

將變量傳遞給類構造函數。您需要更具體地瞭解您的實際需求。 – 2011-12-14 20:56:54

+0

比方說,我有大約2000個第二類實例,它們都需要訪問在Main類中創建的三維String數組。 – BarrensZeppelin 2011-12-14 20:58:53

+0

我假設你的意思不是`String [] [] [] array = Main.threeDimensionalStringArray;`你問的是如何從其他類或別的東西引用靜態變量? – Gray 2011-12-14 21:26:04

回答

2

正如許多人所回答的,正確的方法是將值傳遞給新類的構造函數。

如果由於某種原因你不能這樣做,那麼你可以在Main中使用一個公共的靜態存取器方法來訪問這個值(這會比僅僅公開該字段稍微好一些)。

E.g.

public class Main 
{ 
    private static int integer = 15; 

    public static int getInteger() 
    { 
    return integer; 
    } 
} 

public class NeedInteger 
{ 
    public NeedInteger() 
    { 
    int integer = Main.getInteger(); 
    } 
} 
1

將變量傳遞給類構造函數。

數組引用就是這樣 - 一個引用。或者你可以傳入類本身,或使用靜態(meh)。

1

添加一個構造函數來NeedInteger(和可選的成員,如果您還需要保存它):

public class Main { 
    static int integer = 15; 
    NeedInteger need = new NeedInteger(integer); 
} 
1

你必須:

public class NeedInteger { 

    private int integer; 

    public NeedInteger(int integer) { 
     this.integer = integer; 
     System.out.println(integer); 
    } 
} 

然後,當你創建實例傳遞你的價值做一些不好的舉動(比如使用全局變量)或者將它傳遞給構造函數。

注意:您

public class NeedInteger { 
    System.out.println(integer); 
} 

中有沒有一種方法。我建議所有這些改寫如下:

public Class NeedInteger { 
    NeedInteger(int integer) { 
    System.out.println(integer); 
    } 
} 

如果你真的想要在施工中完成這項工作。

編輯:從您上面的評論。

相反,應該讓類構造成:

public Class NeedStringArray { 
     NeedStringArray(String[][][] stringArr) { 
      //work with String array here 
     } 
} 

,沒有實際的額外開銷,因爲實際的磁盤陣列不會被傳遞,而只是對它的引用。您可能想要將陣列設置爲final或其他東西,以避免它在NeedStringArray構造函數中編輯。

1

整數是私有的,所以它不能被NeedInteger訪問。你必須公開它或使用setter或getter,並且你需要使用Main.integer,因爲它是靜態的。

通常,您在構造函數中設置。

1

根據你的評論我會說你可以在singleton 或其他人建議讓第二個類接受在構造函數中的數組引用。然後您可以使用依賴注入框架(例如Guice)來連接它們

相關問題