Java String / Integer不会解析为枚举

我在Java中有以下枚举

public enum TypeSignsEnum {

    NEGATIVE("45","17","11","66","31","56","85","14","15","91","30"),POSITIVE("58","26","97","12","89","18","22","19","20","16","25","92","10","24","60","65","79","57","27","23","96"),DEFAULT();

    TypeSignsEnum(String ...values) {
        List<String> values1 = Arrays.asList(values);
    }

}

每个都有多个输入值(也是默认值,但尚未) 并且以下所有逻辑都将依赖于此。

但是,这总是会导致错误

java.lang.NullPointerException: Name is null

或者如果我尝试使用实际的Integers

No enum constant com.xxx.zzz.yyy.model.TypeSignsEnum.11

(11是左数第三,负数...

相同的代码,但带有Integers

public enum TypeSignsEnum {

    NEGATIVE(45,17,11,66,31,56,85,14,15,91,30),POSITIVE(58,26,97,12,89,18,22,19,20,16,25,92,10,24,60,65,79,57,27,23,96),DEFAULT();

    TransactionTypeSignsEnum(Integer ...values) {
        List<Integer> values1 = Arrays.asList(values);
    }

}

我该如何工作?

重点是其他调用valueOf(value)的类,该类应该是负值或正值,但是当前每个值都是错误

jnnakj 回答:Java String / Integer不会解析为枚举

解决用例的常见方法是:

  • 将值存储在私有字段中(Java中的枚举不是简单的常量,它们可以具有字段和方法)
  • 添加公共静态方法来搜索您的枚举值
public enum TypeSignsEnum {

    NEGATIVE(45,17,11,66,31,56,85,14,15,91,30),POSITIVE(58,26,97,12,89,18,22,19,20,16,25,92,10,24,60,65,79,57,27,23,96),DEFAULT();

    private final HashSet<Integer> values;

    TypeSignsEnum(Integer ...values) {
        this.values = new HashSet<>(Arrays.asList(values));
    }

    public static TypeSignsEnum fromValue(int value) {
        for (TypeSignsEnum e : TypeSignsEnum.values()) {
            if (e.values.contains(value)) {
                return e;
            }
        }
        return DEFAULT;
    }

}

用法:

System.out.println(TypeSignsEnum.fromValue(11));
,

11不是TypeSignsEnum的值。

TypeSignsEnum只有3个值,POSITIVENEGATIVEDEFAULT

您需要一个辅助方法来返回包含您要查找的值的枚举:

enum TypeSignsEnum {

    NEGATIVE("45","17","11","66","31","56","85","14","15","91","30"),POSITIVE("58","26","97","12","89","18","22","19","20","16","25","92","10","24","60","65","79","57","27","23","96"),DEFAULT();

    private List<String> enumValues;

    TypeSignsEnum(String ...enumValues) {
        this.enumValues = Arrays.asList(enumValues);
    }

    public static TypeSignsEnum findByValue(String val) {
        return Arrays.stream(values())
                .filter(e -> e.enumValues.contains(val))
                .findFirst()
                .orElse(DEFAULT);
    }

}

我将您的列表重命名为enumValues,所以您不会与列出所有枚举的values()方法混淆

TypeSignsEnum typeSignsEnumFor11 = TypeSignsEnum.findByValue("11");
System.out.println("typeSignsEnumFor11 = " + typeSignsEnumFor11);
  

typeSignsEnumFor11 =阴性

本文链接:https://www.f2er.com/3160018.html

大家都在问