使用其值获取接口常量名称

Rav*_*sha 8 java reflection constants

这可能不是项目中的主要用例,但我只是尝试了一种POC类型的项目,在其中我获取密钥代码,并使用其值我想在屏幕上打印密钥名称.我想重新开始编写开关案例,以便考虑通过反思.

有没有办法使用其值获取接口名称的常量整数?

KeyPressed(int i) {
    string pressedKeyName = getPressedKey(i);
    System.out.println(pressedKeyName);
}
Run Code Online (Sandbox Code Playgroud)

cle*_*tus 21

我可以想到两个比使用反射更好的解决方案.

  1. 任何体面的IDE都会自动填写switch语句.我使用IntelliJ并执行此操作(您只需按ctrl-enter).我确信Eclipse/Netbeans有类似的东西; 和

  2. 对于常量而言,枚举比公共静态原语更好.增加的优势是它们可以解除您的这个问题.

但要通过反思找出你想要的东西,假设:

interface Foo {
  public static final int CONST_1 = 1;
  public static final int CONST_2 = 3;
  public static final int CONST_3 = 5;
}
Run Code Online (Sandbox Code Playgroud)

跑:

public static void main(String args[]) {
  Class<Foo> c = Foo.class;
  for (Field f : c.getDeclaredFields()) {
    int mod = f.getModifiers();
    if (Modifier.isStatic(mod) && Modifier.isPublic(mod) && Modifier.isFinal(mod)) {
      try {
        System.out.printf("%s = %d%n", f.getName(), f.get(null));
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

CONST_1 = 1
CONST_2 = 3
CONST_3 = 5
Run Code Online (Sandbox Code Playgroud)