用于将Properties映射到Object的Java Reflection

时间:2016-11-02 21:58:18

标签: java dictionary reflection properties mapping

我有以下源代码将属性文件映射到我的Object。

    private Configuration MapPropertiesToObjectOrNull(Properties defaultProps){

    Configuration config = new Configuration();
    Enumeration e = defaultProps.propertyNames();

    while (e.hasMoreElements()) {
        String key = (String) e.nextElement();
        try {
            Field currField = config.getClass().getDeclaredField(key);
            try {
                currField.set(config, defaultProps.getProperty(key) );
            } catch (IllegalAccessException e1) {
                e1.printStackTrace();
            }
        } catch (NoSuchFieldException e1) {
            e1.printStackTrace();
        }

    }

    return config;

}

这是一种很好的"映射方法"在我的源代码中避免硬编码" Key" -String?你可能还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

你使事情变得复杂,一般来说,在Java / J2EE应用程序中,我们假设KEYS是常量,值可以在以后修改,所以我们创建属性文件(例如存储数据库用户名,密码,我们提出了像USER_NAME,PASSWORD等这样的密钥,它们永远不会改变,如果需要,可以修改值。

要简单地从属性文件中读取键和值,您可以使用以下代码段:

   try {
       File file = new File("test.properties");
       FileInputStream fileInput = new FileInputStream(file);
       Properties properties = new Properties();
       properties.load(fileInput);

       Enumeration enuKeys = properties.keys();
        while (enuKeys.hasMoreElements()) {
           String key = (String) enuKeys.nextElement();
           String value = properties.getProperty(key);
           System.out.println(key + ": " + value);
           //you can load here to HashMap which can be retrived later
      }
      catch (FileNotFoundException e) {
           e.printStackTrace();
      } catch (IOException e) {
           e.printStackTrace();
      } finally {
           fileInput.close();
      }