2013-08-21 53 views
3

的構造函數,我們有以下的構造函數的一個屬性類:含義描述的財產類

Properties(Properties default) 
    Creates an empty property list with the specified defaults 

是什麼由

我「帶有指定默認值的空屬性列表」是什麼意思寫了一個演示程序來測試所發生的事情:

import java.util.*; 
import java.io.*; 

public class test { 
    private static String z; 
    private static String i; 

    public static void main(String [] args) throws FileNotFoundException, IOException{ 
     z = "a"; 
     i = "b"; 
     Properties p = new Properties(); 

     p.setProperty("z",z); 
     p.setProperty("i",i); 
     p.store(new FileOutputStream("r.txt"), null); 

     Properties pp = new Properties(p); 
     pp.store(new FileOutputStream("random.txt"), null); 
     pp.load(new FileInputStream("in.txt")); 
     pp.store(new FileOutputStream("random1.txt"), null); 
    } 
} 

結果是random.txt是空的,random1.txtz=n。由於random.txt爲空,新創建的屬性沒有默認值。那麼構造器描述是什麼意思?如果我在某個地方錯了,請糾正我。

+0

收件人:「什麼意思」空白屬性列表與指定的默認值「」我的猜測是,如果另一個屬性具有相同的密鑰作爲默認的沒有添加到這個新創建的列表,但用戶試圖通過鍵獲取屬性,然後返回默認值。如果密鑰(帶有新值)稍後添加到列表中,並且用戶嘗試通過同一個密鑰獲取該屬性,則它現在返回新值。 –

+0

@EvgheniCrujcov:會是什麼? –

回答

2

由於the store documentation states,默認屬性(在Properties(Properties)構造函數中傳遞的屬性)不寫入外部文件。顯然你認爲他們會是(一個合理的假設)。

以下測試:

import java.util.*; 
import java.io.*; 

public class test { 
    public static void main(String [] args) { 
     Properties p = new Properties(); 

     p.setProperty("z", "z value"); 
     p.setProperty("i", "i value"); 

     Properties pp = new Properties(p); 
     pp.setProperty("i", "some other value"); 

     System.out.println(p.getProperty("z")); 
     System.out.println(p.getProperty("i")); 
     System.out.println(pp.getProperty("z")); 
     System.out.println(pp.getProperty("i")); 
    } 
} 

輸出:

z value 
i value 
z value 
some other value 

如果您需要包括默認,當你store,其中一個方案是用自己的類擴展Properties並覆蓋store輸出默認屬性也是如此。

2

這意味着當它在運行時找不到屬性時,它將回退到默認屬性,它不是複製構造函數。

您可能需要考慮使用.putAll()來代替。

0

Properties pp = new Properties(p);

這使得默認性能水平的任意嵌套。

例如

Properties p = new Properties(); 
    p.setProperty("z","hello"); 
    p.store(new FileOutputStream("D://java1.properties"), null); 
    Properties pp = new Properties(p); 
    pp.setProperty("y","world"); 
    System.out.println(pp.getProperty("z")); //prints hello 

如果您在PP對象調用pp.getProperty("z"),並「Z」不存在時,Java對於「Z」 默認屬性對象,它是P對象,那裏它找到「z」並打印其值「你好」

欲瞭解更多詳情,請看看here