2017-03-29 13 views
-1

방법을 잘 모르 문구를하지만 내가 가진 그이 : 나는 값 0x00000001에서 문자열 "CommandGroupLength"를 얻는 방법을 원하는자바 - 이름 값에 Intergers을 정의 Converting이

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

에서

;

그럴 수 있습니까?

+1

값이 0x00000001 인 변수의 이름에 액세스 하시겠습니까? 불가능합니다. 그러나 키 - 값 쌍이있는지도를 만들면 결과를 얻을 수 있습니다. –

+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?

당신이지도와 훨씬 쉽게 같은 일을 달성 할 수있는 볼 수있는 키 - 값 쌍을 포함합니다. 그것은 컬렉션이나 배열 또는 뭔가를 반환해야합니다, 하나가 보장되지 않기 때문에

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

는 당신은, 그 값이 모든 키에 대한지도의 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; 
}