2016-11-02 8 views
0

プロパティファイルをオブジェクトにマップするためのソースコードが次のようになっています。オブジェクトをオブジェクトにマップするJavaのリフレクション

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を避けるための良い "マッピング方法"ですか?多分あなたは他のアイディアを持っていますか?

+0

をあなたは、動的キーを処理したかった、それを何ですか? – developer

+0

ClassおよびPropertyfileのPropertynamesは同等でなければなりません。私はそれを動的にする可能性はないと思う? –

答えて

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(); 
     } 
+0

はい、でも私のソースコードには文字列があります。プロジェクトで 'prop.getProperty(" foo ");'を5回使ってキーを変更すると、5回変更する必要があります。私の解決策では、リファクタリングすることができます。 (私の機能では、まだ行われていません) –

+0

私が言及したように、私たちは一般的に、キーはSTATICだと仮定していますが、変更はしませんが、PUBLIC STATIC FINAL "Keys.java"ファイル内の文字列。そのため、1つの場所からのみ変更できます。 – developer

+0

公開静的な最終的なアイデアは悪くないです。 –

関連する問題