2014-09-12 56 views
0

我期待在類中聲明一個常量, 這樣它將在類加載時被設置爲第一件事,改變。基於來自外部的參數的值初始化常量字段成員

但是,它應該設置的值取決於類從文件中讀取的文件的內容。 以下將不起作用:

static final int N=someMethod(path); 

,除非我也有:

static Path path = Paths.get("C:\\Users\\Me\\S2.txt"); 

如果我這樣做,的Paths.get()帕拉姆將必須手動更改每次運行。

給予爪哇調用路徑名不會做either--這僅僅 的main()方法的String[]參數(?),和main()不運行直到後來。

有沒有比我在上面兩行代碼中做的更好的方法呢?

TIA

+0

靜態成員在加載類時設置。你可能可以用自定義的'ClassLoader'玩遊戲,但其中的瘋狂。也許如果你解釋爲什麼你需要這個,我們可以建議一個更好的選擇。爲什麼它必須是最終的?您可以在值可用時進行設置並確保它不可變。 – 2014-09-12 22:12:13

+0

@JimGarrison可以做到沒有那個變種N是最終 - 但看起來更好作爲一個常數。該類將加載大小爲N的問題實例 - 讀取文件並初始化靜態區域中的所有數據strcs。然後將在非靜態實例中探索解決方案空間。不希望N--在所有這些參數中設置大小參數。 – user3880721 2014-09-12 22:14:23

+2

@ user3880721:在靜態初始化器中讀取文件只是一個壞主意。創建*實例*。該實例可以是單例,但可以將其作爲實例,以便獲取該實例的代碼可以處理由於嘗試讀取文件而導致的異常以及可能出錯的任何事情。 – 2014-09-12 22:15:38

回答

1

它沒有意義的聲明恆定值,並設置其值爲參考我看來另一個值。我會說在你的情況下使用系統屬性會更好。這個問題的答案很清楚地解釋瞭如何做到這一點:setting system property

-1

像盧卡斯說,像這樣做:

static Path path = Paths.get(System.getProperty("path")); 

,然後當你運行你的代碼,運行它像這樣:

java myCoolCode.jar -Dpath=C:\\Users\\Me\\S2.txt