【问题标题】:Instantiate objects by configuration file on java通过java上的配置文件实例化对象
【发布时间】:2016-04-09 11:29:57
【问题描述】:

我有这个对象:

public class TheObjectToInstantiate{
 public String Name;
 public String Surname;
 public TheObjectToInstantiate(){
 }
}

我想用配置文件实例化一个 TheObjectToInstantiate[] 数组:

TheObjectToInstantiate1.Name="Pippo"
TheObjectToInstantiate1.Surname="PippoSurname"
TheObjectToInstantiate2.Name="Pluto"
TheObjectToInstantiate2.Surname="PlutoSurname"

我试过了

public ConfigReader(){
    Properties prop = new Properties();
    InputStream input = null;

    try {

        input = new FileInputStream("configuration.prop");
        prop.load(input);

        Enumeration<?> e = prop.propertyNames();
        while (e.hasMoreElements()) {
            String key = (String) e.nextElement();
            String value = prop.getProperty(key);
            ......
        }

    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

手动扫描所有属性并实例化对象。

有没有手动比较所有属性的方法或开源包装器来做到这一点? 谢谢

【问题讨论】:

  • 您可以从apache configuration 获得一些帮助并检索字符串数组configuration.getAsStringArray("key")
  • 您希望这段代码做什么以及它实际做什么?
  • this thread。如果必须在配置文件中配置数组,最好的选择是 XML。
  • 我认为使用 json 文件并使用 Jackson 或 Gson 等库反序列化它们会更容易,特别是如果您希望在主对象中有更复杂的结构,如嵌套对象或 List 或数组。 mkyong.com/java/how-to-convert-java-object-to-from-json-jackson

标签: java oop object properties


【解决方案1】:

使用 json 文件并使用 Jackson 等库对它们进行反序列化更容易。您也可以查看http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jacksonHow to use Jackson to deserialise an array of objects

public class TheObjectToInstantiate {
    public String Name;
    public String Surname;
    public TheObjectToInstantiate(){}
}

public class JacksonExample {
    public static void main(String[] args) {

    ObjectMapper mapper = new ObjectMapper();

    try {
        // Convert JSON string from file to Object
        TheObjectToInstantiate object = mapper.readValue(new File("G:\\myobject.json"), TheObjectToInstantiate.class);
    } catch (IOException e) {
            e.printStackTrace();
    }

}

json 文件应该是这样的:

{
  "Name" : "foo",
  "Surname" : "bar"
}

您还可以反序列化对象列表:

List<TheObjectToInstantiate> myObjects = mapper.readValue(new File("G:\\myobjectlist.json"), new TypeReference<List<TheObjectToInstantiate>>(){});


[{
    "Name" : "foo1",
    "Surname" : "bar1"
},
{
    "Name" : "foo2",
    "Surname" : "bar2"
}]

它还支持更复杂的结构,例如嵌套对象或主对象内的其他对象的列表或数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2023-03-13
    • 2013-03-29
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多