【问题标题】:Accessing string representations of constant field values in java在java中访问常量字段值的字符串表示
【发布时间】:2014-03-06 08:40:54
【问题描述】:

我正在使用具有常量字段值的导入类:

public static final int BLUE = 1;
public static final int GREEN = 2;

等等

有没有办法从 int 值中获取常量字段值的字符串表示形式?

即给定值 2 我想得到一个绿色字符串。

附:这不是我的课,所以我不能使用 ENUMs

【问题讨论】:

  • 您的意思是BLUE = 1 等。然后使用Foo.BLUE 其中Foo 是类的名称。
  • 1或2不能是变量名
  • 看看枚举,使用序数。可能会有帮助。
  • 你真的没有,因为那不会编译。

标签: java field constants


【解决方案1】:

我想你的朋友应该是枚举

public enum Color {
  BLUE(1), GREEN(2);
}

现在,如果您尝试获取Color.BLUE.ordinalValue(),它将返回1,如果您输入Color.BLUE.name(),它将返回BLUE

您也可以像 pojo 类一样在枚举中声明私有变量,并在构造函数中初始化它们。您可以编写 getter 方法来返回这些变量。

【讨论】:

    【解决方案2】:

    如果您可以更改包含这些常量的类,最好使用value() 方法将其设为枚举。

    否则,我建议使用反射构建一个Map<Integer, String>一次,然后只进行地图查找:

    Map<Integer, String> valueToStringMap = new HashMap<>();
    for (Field field : Foo.class.getFields()) {
        int modifiers = field.getModifiers();
        if (field.getType() == Integer.class && Modifier.isPublic(modifiers)
            && Modifier.isStatic(modifiers)) {
            valueToStringMap.put((Integer) field.get(null), field.getName());
        }
    }
    

    【讨论】:

    • 当我尝试这个时,我没有得到我想要的,所以重新发布。
    • @Michael_user3015308:“我没有得到我想要的”几乎没有给我们任何信息——它以什么方式没有达到你想要的效果?它没有找到所有字段吗?此外,发布一个实际上与现有问题重复的新问题是不受欢迎的......尤其是当新问题没有比这个更多的信息时,真的。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2022-07-22
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2017-03-06
    相关资源
    最近更新 更多