如何在java中通过用户定义的名称获取枚举?
我在Java 8中定义了一个枚举,如下所示:如何在java中通过用户定义的名称获取枚举?,java,Java,我在Java 8中定义了一个枚举,如下所示: public enum Cflb implements IBaseEnum { 没收违法所得("没收违法所得、没收非法财物", 2), 暂扣或者吊销许可证("暂扣或者吊销许可证、暂扣或者吊销执照", 4); private String name; private int value; public void setName(String name) { this.name =
public enum Cflb implements IBaseEnum {
没收违法所得("没收违法所得、没收非法财物", 2),
暂扣或者吊销许可证("暂扣或者吊销许可证、暂扣或者吊销执照", 4);
private String name;
private int value;
public void setName(String name) {
this.name = name;
}
public void setValue(int value) {
this.value = value;
}
Cflb(String name, int value) {
this.name = name;
this.value = value;
}
@Override
public String getName() {
return name;
}
@Override
public int getValue() {
return value;
}
}
Cflb cflb = getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
Cflb cflb = Cflb.getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
如何通过“”获取enumn暂扣或者吊销许可证、暂扣或者吊销执照"? 注意:不能按值获取enumn。代码可能如下:
public enum Cflb implements IBaseEnum {
没收违法所得("没收违法所得、没收非法财物", 2),
暂扣或者吊销许可证("暂扣或者吊销许可证、暂扣或者吊销执照", 4);
private String name;
private int value;
public void setName(String name) {
this.name = name;
}
public void setValue(int value) {
this.value = value;
}
Cflb(String name, int value) {
this.name = name;
this.value = value;
}
@Override
public String getName() {
return name;
}
@Override
public int getValue() {
return value;
}
}
Cflb cflb = getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
Cflb cflb = Cflb.getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
使用
values()
循环枚举常量,并比较名称
:
static Cflb getEnumnByInternalName(String iname) {
for(Cbfl c : values()){
if(c.name.equals(iname)){
return c;
}
}
return null; //or throw an Exception, whatever you need
}
然后你可以这样使用它:
public enum Cflb implements IBaseEnum {
没收违法所得("没收违法所得、没收非法财物", 2),
暂扣或者吊销许可证("暂扣或者吊销许可证、暂扣或者吊销执照", 4);
private String name;
private int value;
public void setName(String name) {
this.name = name;
}
public void setValue(int value) {
this.value = value;
}
Cflb(String name, int value) {
this.name = name;
this.value = value;
}
@Override
public String getName() {
return name;
}
@Override
public int getValue() {
return value;
}
}
Cflb cflb = getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
Cflb cflb = Cflb.getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
正如@khelwood上面提到的:删除setter。使用
values()
循环枚举常量,并比较名称
:
static Cflb getEnumnByInternalName(String iname) {
for(Cbfl c : values()){
if(c.name.equals(iname)){
return c;
}
}
return null; //or throw an Exception, whatever you need
}
然后你可以这样使用它:
public enum Cflb implements IBaseEnum {
没收违法所得("没收违法所得、没收非法财物", 2),
暂扣或者吊销许可证("暂扣或者吊销许可证、暂扣或者吊销执照", 4);
private String name;
private int value;
public void setName(String name) {
this.name = name;
}
public void setValue(int value) {
this.value = value;
}
Cflb(String name, int value) {
this.name = name;
this.value = value;
}
@Override
public String getName() {
return name;
}
@Override
public int getValue() {
return value;
}
}
Cflb cflb = getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
Cflb cflb = Cflb.getEnumnByInternalName("暂扣或者吊销许可证、暂扣或者吊销执照");
正如@khelwood上面提到的:删除setter。循环遍历enum元素,直到找到具有匹配的
名称的元素。
。顺便说一句,在一个enum中有setter是不正常的。通常期望enum是完全恒定的。IBaseEnum
到底是什么?这是一个“真实的”值吗“Java枚举?或者只是一个名为“enum”的类?循环遍历enum元素,直到找到具有匹配的名称的类为止。顺便说一句,在enum中使用setter是不正常的。枚举通常应为完全常量。IBaseEnum
究竟是什么?这是一个“真正的”Java枚举吗?或者只是一个名为“enum”的类?谢谢,我已经根据您的提示解决了这个问题。@f1sh谢谢,我已经根据您的提示解决了这个问题。@f1sh