【问题标题】:How to get member name from Interface that acts at Enum, Java如何从作用于 Enum、Java 的接口中获取成员名称
【发布时间】:2021-10-29 16:21:12
【问题描述】:

假设我有以下界面:

public interface NUMS {
  public static final int ZERO = 0;
  public static final int ONE = 1;
  public static final int TWO = 2;
 }

然后我有一个函数返回 0-2 之间的 int。 有没有办法获取接口中数字所代表的成员名?

例如:

函数返回 1,我想将其映射回 ONE,而不使用 Map/Array。

谢谢!

【问题讨论】:

  • 为什么不使用枚举呢?
  • 不,除了使用反射或手动映射所有选项之外没有可能。
  • 为什么不使用实际的枚举?

标签: java interface


【解决方案1】:

技术上,有,使用反射:

    String getConstantName(int value) {
        // use reflection to check all fields of NUMS
        for (Field f : NUMS.class.getFields()) {
            try {
                if (f.getInt(null) == value) {
                    return f.getName();
                }
            } catch (IllegalAccessException e) {
                // ignore
            }
        }
        return "";
    }

但这只是为了教育目的,请不要在实际代码中使用这样的方法。正如其他人建议的那样,只需使用enum

【讨论】:

  • 谢谢!如果可以的话,我肯定会使用 Enum,但我只是使用其他人编写的接口,无法更改它。
  • @omrib40 然后至少将反射访问的结果缓存在某种单例字符串数组或映射中。
猜你喜欢
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2014-02-28
  • 2013-01-15
相关资源
最近更新 更多