如何获取Java Enum类型的名称?
我有以下代码适用于特定枚举类型,我可以将其设为更强泛型吗?
public enum Category {
APPLE("3"),
ORANGE("1"),
private final String identifier;
private Category(String identifier) {
this.identifier = identifier;
}
public String toString() {
return identifier;
}
public static String getEnumNameForValue(Object value){
Category[] values = Category.values();
String enumValue = null;
for(Category eachValue : values) {
enumValue = eachValue.toString();
if (enumValue.equalsIgnoreCase(value)) {
return eachValue.name();
}
}
return enumValue;
}
}
答案 0 :(得分:37)
您应该通过调用name()
方法替换getEnumNameForValue
。
答案 1 :(得分:25)
尝试以下代码
public enum SalaryHeadMasterEnum {
BASIC_PAY("basic pay"),
MEDICAL_ALLOWANCE("Medical Allowance");
private String name;
private SalaryHeadMasterEnum(String stringVal) {
name=stringVal;
}
public String toString(){
return name;
}
public static String getEnumByString(String code){
for(SalaryHeadMasterEnum e : SalaryHeadMasterEnum.values()){
if(code == e.name) return e.name();
}
return null;
}
}
现在,您可以使用以下代码按值检索枚举
SalaryHeadMasterEnum.getEnumByString("Basic Pay")
使用下面的代码将ENUM作为字符串
SalaryHeadMasterEnum.BASIC_PAY.name()
使用以下代码获取枚举的字符串值
SalaryHeadMasterEnum.BASIC_PAY.toString()
答案 2 :(得分:5)
试试,以下代码..
@Override
public String toString() {
return this.name();
}
答案 3 :(得分:1)
以下是代码,它将从Enum值返回Enum名称。
public enum Test {
PLUS("Plus One"), MINUS("MinusTwo"), TIMES("MultiplyByFour"), DIVIDE(
"DivideByZero");
private String operationName;
private Test(final String operationName) {
setOperationName(operationName);
}
public String getOperationName() {
return operationName;
}
public void setOperationName(final String operationName) {
this.operationName = operationName;
}
public static Test getOperationName(final String operationName) {
for (Test oprname : Test.values()) {
if (operationName.equals(oprname.toString())) {
return oprname;
}
}
return null;
}
@Override
public String toString() {
return operationName;
}
}
public class Main {
public static void main(String[] args) {
Test test = Test.getOperationName("Plus One");
switch (test) {
case PLUS:
System.out.println("Plus.....");
break;
case MINUS:
System.out.println("Minus.....");
break;
default:
System.out.println("Nothing..");
break;
}
}
}
答案 4 :(得分:0)
在这种情况下,您可以将enum的值转换为List并在其中流式传输。 类似于以下示例。我建议使用 filter()。
使用ForEach :
List<Category> category = Arrays.asList(Category.values());
category.stream().forEach(eachCategory -> {
if(eachCategory.toString().equals("3")){
String name = eachCategory.name();
}
});
或者,使用过滤器:
当您要查找代码时:
List<Category> categoryList = Arrays.asList(Category.values());
Category category = categoryList.stream().filter(eachCategory -> eachCategory.toString().equals("3")).findAny().orElse(null);
System.out.println(category.toString() + " " + category.name());
要查找名称时:
List<Category> categoryList = Arrays.asList(Category.values());
Category category = categoryList.stream().filter(eachCategory -> eachCategory.name().equals("Apple")).findAny().orElse(null);
System.out.println(category.toString() + " " + category.name());
希望有帮助!我知道这是一篇很老的文章,但是有人可以得到帮助。