2017-03-29 4 views
-1

方法がわからないフレーズに私が持っているこの:私は値0x00000001のから文字列「CommandGroupLength」を得るための方法をしたいJavaの - 名値にIntergersを定義変換

public class DefinedValues{ 
public static final int CommandGroupLength = 0x00000001; 
} 

これは可能ですか?

+1

値0x00000001を持つ変数の名前にアクセスしたいですか?それは不可能です。しかし、あなたはKey-Value Pairsを持つMapを作成することができます。その結果から、結果を得ることができます –

+0

なぜこれをやりたいのですか?簡単な解決策があるかもしれません。 – Aloso

+0

あなたはおそらくリフレクションを使用してクラスのすべてのフィールドを調べることができますが、その時点でこれをやりたいかどうかを本当に考えてください。そうしないといけません。 – cubrr

答えて

1

0x00000001の値を持つ変数の名前にアクセスしますか?これは不可能であるより:Java8と

public class DefinedValues { 
    public static final int CommandGroupLength = 0x00000001; 
} 

ことが技術的に可能である、少なくともあなたは地図とはるかに簡単に同じことを達成することができますJava Reflection: How to get the name of a variable?

を参照して、反射を経由して、変数の名前を取得するには、どのKey-Value-Pairsを含みます。

Map<String,Integer> myMap= new HashMap<>(); 
myMap.put("CommandGroupLength", 0x00000001); 

その後、あなたは唯一の1がある確保されていないため、それがコレクションまたは配列か何かを返す必要があります、その値を持つすべてのキーのための地図ののentrySetで検索関数を書きます類似。 ここに私のコードは:

public static void main(String[] args) { 
    Map<String,Integer> myMap = new HashMap<>(); 
    myMap.put("CommandGroupLength", 0x00000001); 
    myMap.put("testA", 5); 
    myMap.put("testB", 12); 
    myMap.put("testC", 42); 

    System.out.println("Searching for value 0x00000001 in myMap"); 
    Set<String> searchResults = findKeyByValue(myMap, 0x00000001); 
    System.out.println("I found the following keys:"); 
    boolean isFirst = true; 
    for(String result : searchResults) { 
    if(isFirst) 
     isFirst = false; 
    else 
     System.out.printf(", "); 

    System.out.printf("%s", result); 
    } 
} 

public static Set<String> findKeyByValue(Map<String, Integer> map, Integer value) { 
    Set<String> result = new HashSet<>(); 

    if(value != null) { 
    Set<Entry<String, Integer>> entrySet = map.entrySet(); 

    for(Entry<String, Integer> entry : entrySet) { 
     if(value.equals(entry.getValue())) { 
     result.add(entry.getKey()); 
     } 
    } 
    } 

    return result; 
} 
関連する問題