【发布时间】:2017-08-30 13:33:04
【问题描述】:
我的枚举有问题。
这里是:
public enum DataEnum {
NAME_PEOPLE("NAME_PEOPLE"),
FIRSTNAME_PEOPLE("FIRSTNAME_PEOPLE"),
ID("ID"),
PASS("PASS"),
NEW_MAIL("NEW_MAIL");
private String name;
private DataEnum(String s) {
name = s;
}
public String getValue() {
return name;
}
public void setValue(String s) {
this.name = s;
}
}
我在那里使用它:
public String transform(String textToTransform, People people){
Pattern TAG_REGEX = Pattern.compile("#(.+?)#");
Matcher matcher = TAG_REGEX.matcher(textToTransform);
while (matcher.find()) {
String s = matcher.group(1);
switch (s) {
case "FIRSTNAME_PEOPLE":
DataEnum.valueOf(s).setValue(people.getFirstName());
break;
case "NAME_PEOPLE":
DataEnum.valueOf(s).setValue(people.getName());
break;
case "ID":
DataEnum.valueOf(s).setValue(people.getEmail());
break;
case "PASS":
DataEnum.valueOf(s).setValue(people.getPassword());
break;
default:
break;
}
textToTransform = textToTransform.replace("#" + DataEnum.valueOf(s) + "#", DataEnum.valueOf(s).getValue());
}
return textToTransform;
}
我收到以下错误:
原因:java.lang.IllegalArgumentException:没有枚举常量 fr.pdf.utils.DataEnum.FIRSTNAME_PEOPLE
编辑:
原因:java.lang.IllegalArgumentException:没有枚举常量 fr.pdf.utils.DataEnum.FIRSTNAME_PEOPLE 在 java.lang.Enum.valueOf(Enum.java:238) 在 fr.pdf.utils.DataEnum.valueOf(DataEnum.java:3) 在 fr.pdf.services.impl.MailServiceImpl.transform(MailServiceImpl.java:160) 在 fr.pdf.services.impl.MailServiceImpl.sendMail(MailServiceImpl.java:84) 在 fr.pdf.dao.impl.People.update(People.java:372)
第 160 行对应:
textToTransform = textToTransform.replace("#" + DataEnum.valueOf(s) + "#", DataEnum.valueOf(s).getValue());
【问题讨论】:
-
添加完整的stacktarce
-
除了实际问题之外,修改枚举值对我来说似乎是一个真的坏主意。这基本上是全局状态。
-
我认为 op 不明白枚举的用途
-
HashMap 怎么样? key 是标签名称,value 是 people 对象的当前值。这也适用于并发线程。您的 Enum 解决方案不会...
-
您的
String textToTransform究竟包含什么?与#(.*?)#(此处为FIRSTNAME_PEOPLE)的第1组匹配的文本是否可能包含一些额外的(不可见的)字符?你能打印它的代码点吗(Arrays.toString(s.codePoints().toArray())的结果)。