当前位置: 首页 > 知识库问答 >
问题:

如何根据属性的值获取属性的名称?

尉迟华翰
2023-03-14

我有一节课:

public class Something{
    public static final int SOMETHING_0 = 0;
    public static final int SOMETHING_1 = 1;
    public static final int SOMETHING_2 = 2;
    // ... etc
}

值是唯一的,如何通过其值获取属性的名称?

通过反射,例如:

// intValue = 1
String getNameByValue(int intValue){
    ...
    // returns "SOMETHING_1"
    return nameOfProperty;
} 

共有2个答案

沈子实
2023-03-14

一种选择是:

public class Something {
    public static final int SOMETHING_0 = 0;
    public static final int SOMETHING_1 = 1;
    public static final int SOMETHING_2 = 2;
    public String toString(int value) {
        switch (value) {
            case SOMETHING_0: return "SOMETHING_0";
            case SOMETHING_1: return "SOMETHING_1";
            case SOMETHING_2: return "SOMETHING_2";
        }
        throw new IllegalArgumentException("Unknown value: " + value);
    }
}
// Use:
int value = Something.SOMETHING_1;
String name = Something.toString(value);

如果 int 值是连续的,从 0 开始,那么您可以使用枚举,它是 ordinal() 位置:

public enum Something {
    SOMETHING_0, SOMETHING_1, SOMETHING_2
}
// Use:
int value = Something.SOMETHING_1.ordinal();
String name = Something.values()[value].name(); // or toString()

如果<code>int</code>值不连续,您仍然可以使用<code>枚举</code>:

enum Something {
    SOMETHING_0(0),
    SOMETHING_10(10),
    SOMETHING_20(20);
    private final int value;
    private Something(int value) {
        this.value = value;
    }
    public int getValue() {
        return this.value;
    }
    public static Something from(int value) {
        for (Something something : values())
            if (something.value == value)
                return something;
        throw new IllegalArgumentException("Unknown value: " + value);
    }
}
// Use:
int value = Something.SOMETHING_10.getValue();
String name = Something.from(value).name(); // or toString()

或者,如果您希望显示文本与常量名称不同,并且您不喜欢异常,您可以这样做:

enum Something {
    SOMETHING_0 ( 0, "Something 0"),
    SOMETHING_10(10, "Something 10"),
    SOMETHING_20(20, "Something 20");
    private final int    value;
    private final String description;
    private Something(int value, String description) {
        this.value = value;
        this.description = description;
    }
    public int getValue() {
        return this.value;
    }
    public String getDescription() {
        return this.description;
    }
    public static Optional<Something> from(int value) {
        for (Something something : values())
            if (something.value == value)
                return Optional.of(something);
        return Optional.empty();
    }
    public static String toString(int value) {
        for (Something something : values())
            if (something.value == value)
                return something.description;
        return "Unknown value (" + value + ")";
    }
}
// Use:
String desc = Something.toString(value);
// Or:
String desc = Something.from(value).map(Something::getDescription).orElse("Oops");
井疏珂
2023-03-14

你可以很难做到这一点:

 public class Something {
        public static final int SOMETHING_0 = 0;
        public static final int SOMETHING_1 = 1;
        public static final int SOMETHING_2 = 2;

    }

 String getNameByValue(int intValue) throws IllegalArgumentException,
        IllegalAccessException {
    for (Field field : Something.class.getFields()) {
        if (field.getInt(null) == intValue) {
            return field.getName();
        }
    }
    return "";
}

如果你这样做,圣诞老人会发疯,杀死几十只无辜的小猫。

我们的你可以以正确的方式做到这一点,将您的价值观实现为枚举

public enum Something {
        SOMETHING_0(0),
        SOMETHING_1(1),
        SOMETHING_2(2);
        final int val;
        Something(int val){
            this.val = val;
        }
        static public  Something byNumber(int number){
            for (Something somthing : Something.values()){
                if (number==somthing.val){
                    return somthing;
                }
            }
            throw new RuntimeException("Value not found");
        }

    }
 类似资料:
  • 问题内容: 我想根据属性名称打印属性值,例如 我想做这样的事情 上面的代码给出了一个,我相信这是因为BeatifulSoup使用了name,所以它不能用作关键字参数。 问题答案: 这很简单,请使用以下代码- 如果不清楚,请发表评论。

  • 在 PowerShell 中,如何通过指定对象的名称(字符串)来获取对象的属性值?我想要类似这样的东西: 是否有类似于“获取属性名称”的内容?

  • 我向一个服务发出API请求,该服务在主体中返回一个JSON对象。 我似乎无法在groovy中获得名为“properties”的键的值。 每次我调用我得到以下内容 但是如果我只调用,就会得到预期的JSON对象 同样,如果I我得到这只是当我我是否得到上述响应

  • 我需要标签中的属性值。< br >例如。Name xmlns:xsi = " http://www . w3 . org/2001/XML inst " xsi:space schema = " Name _ 5879 . xsd "

  • 检索给定节点resp的所有属性名(而不是属性值!)的Xpath表达式看起来如何。xml标签? 假设以下XML文档: Xpath//title/@*会选择“eng,fr,easyreading”,但哪个Xpath会选择“lang,lang,type”?

  • 问题内容: 我找不到使用Thymeleaf从URL获取属性的任何解决方案。例如,对于URL: 我需要获取“错误”属性值。如果有帮助,我也正在使用SpringMVC。 问题答案: 经过一番调查,我发现实际上是Spring EL问题。因此,使用null检查的完整答案是: