2011-11-02 66 views

回答

3

用戶可以:

public interface Foo { 
    String a = Properties.getProperty("foo"); // public static final by default 
} 

然而,這意味着Properties.getProperty(..)必須是其依賴已初始化的消息源上的一個靜態方法(靜態再次)。取決於您使用的項目和框架,這可能不是最佳選擇。

2

您可以通過包含final成員的配置初始化bean。既然它是最終的,你可以在構建/初始化時分配給它,然後它是不可變的。

要使用Spring配置屬性文件,請檢查PropertyPlaceholderConfigurer。這將允許您使用您的類路徑,文件系統,遠程服務等一個或多個屬性文件的Spring bean

1

是的,這是可能的,初始化:

public static final CONSTANT = System.getProperty("myProperty"); 
+0

這不會從屬性文件中獲取屬性。 – BalusC

-1

通過讀取屬性文件,就像在下面的例子中。

int property1; 
String otherProperty; 
public void loadProperties(File propFile) throws IOException { 
    BufferedReader reader = new BufferedReader(new FileReader(propFile)); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     if (line.startsWith("Property1=")) { 
      property1 = Integer.parseInt(line.substring(10)); 
     } 
     if (line.startsWith("OtherProperty=")) { 
      otherProperty = line.substring(14); 
     } 
    } 
} 
+1

您無法將該代碼放入界面。 –

0

雖然使用一些靜態輔助方法(如已經建議)是可能的,我會強烈建議你不要2倍這樣做的原因:

  1. 這看起來像一個非常糟糕的設計。如果您需要動態值 - 使其成爲界面中的一種方法。或者直接使用一個靜態助手 - 無論如何你都需要一個靜態助手來使它工作。
  2. 常量可能是在編譯時內聯。這種情況不應該發生在這種特殊情況下 - 編譯器只有在能夠證明在執行過程中值不會發生變化的情況下,才應該使用內聯,基本上,如果您使用文字初始化它,但這樣做的可能性很小。只要想一想它會有多糟糕 - 無論程序在哪個環境下運行,它都會在編譯期間收集一些無用的值,而不是配置的值。 (這是一個理論問題,需要說)。
+0

好的,我的第二點是不相關的 - 按照Java語言規範9.3.1:「接口體中的每個字段都必須有一個初始化表達式,它不一定是一個常量表達式。當接口初始化時(第12.4節),賦值只執行一次。「 所以這是一種有效的方法......但仍然非常難看。 –