2012-02-07 4 views
3

Reflectionを使用して構成クラスのシリアライズを厳密にコーディングしないようにしようとしていて、何かを見つけられない状況に遭遇しました。ここに私がやろうとしていることがあります。リフレクションを使用して、クラス内のすべてのフィールドを動的に保存しますか? ( "<FieldName>"、 "<FieldValue>")

私は プロパティフィールドに名前と値を保存するためにリフレクションを使用したいので、

public class Configuration { 

    public boolean bool = false; 
    public int integer = 1; 
    public int[] intArray = {0, 1}; 

} 

のようなクラスを持っています。

--properties-- 
bool=false 
integer=1 
intArray=0,1 

名の部分は非常に単純です。私の問題は、各フィールドの値を取得し、特に各int []の値を取得しています。配列のほかに、すべての値はプリミティブなので、toString()はうまく動作します。

誰もがOracleよりも優れた例を示してくれますか?

+1

'new int [] {1,2,3} .toString()'は期待通りに動作しません。 'Object.toString()'に委譲します。 – ggreiner

+2

なぜXMLやJSONを使用しないのですか?どちらもシリアライザになり、かなり人間が読めるようになっています。 –

+1

@llia G私は実際に結果をファイルに保存するためにPropteriesオブジェクトを使用していません。私はguiの設定を保存し、設定ファイルからそれらを開始するかなり複雑な方法に取り組んでいます。プロパティファイルを使用して、GUIの開始時のJComponentの値を設定します。私は、構成ファイル内の対応する値の名前にComponent.setName(String)メソッドを使用しました。 – user1125622

答えて

3

配列を使用する必要がありますか?もしそうでなければ、オブジェクトをリストとして表現することができ、それはあなたの整数のリスト表現を出力します。

public boolean bool = false; 
public int integer = 1; 
public int[] intArray = {0, 1}; // <-- This prints array's memory address 
public List<Integer> intList = Arrays.asList(1, 2 , 3); // <-- This prints [1,2,3] 

public static void main(String[] args) throws Exception { 
    Config c = new Config(); 
    for (Field f : c.getClass().getDeclaredFields()) { 
      System.out.println(f.get(c)); 
    } 

} 

また、実行時に行うこともできます。

if ("int[]".equals(f.getType().getSimpleName())) { 
    // do stuff 
} 
0

java.utils.Arrays.toString(int [] a)メソッドを使用できます。 正しい配列型を取得するには、Kalの答えでf.getType()。isArray()とf.getType()。getComponentType()を使用できます。

関連する問題