Java - 将定义的间隔转换为名称值

时间:2017-03-29 13:38:01

标签: java class defined

不知道怎么说,但我有这个:

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

我想要一种从值0x00000001获取String“CommandGroupLength”的方法;

这可能吗?

1 个答案:

答案 0 :(得分:1)

是否要访问值为0x00000001的变量的名称?比这还不可能:

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

使用Java8技术上至少可以通过反射得到变量的名称,参见Java Reflection: How to get the name of a variable?

使用包含Key-Value-Pairs的Map,您可以更轻松地实现同样的目标。

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

然后你编写一个函数,在Map的entrySet中搜索具有该值的所有键,因为不确定只有一个,它需要返回Collection或Array或类似的东西。 这是我的代码:

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;
}