属性类构造函数描述的含义

时间:2013-08-21 19:39:25

标签: java

对于属性类,我们将以下内容作为构造函数之一:

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为空。那么构造函数描述意味着什么?如果我错了,请纠正我。

3 个答案:

答案 0 :(得分:2)

这意味着当它在运行时找不到属性时,它将回退到默认的属性,它不是复制构造函数。

您可能需要考虑使用.putAll()

答案 1 :(得分: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 :(得分: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.getProperty("z")对象上调用PP,并且“z”不存在,则Java会在默认情况下查找“z”属性对象是P对象,它找到“z”并打印其值“hello”

有关详细信息,请查看here