阅读文档后String java.lang.Enum.name()我不确定我何时使用name()以及何时使用toString().
返回此枚举常量的名称,与其枚举声明中声明的完全相同.大多数程序员应优先使用toString方法,因为toString方法可能会返回一个更加用户友好的名称.此方法主要用于特殊情况,其中正确性取决于获取确切名称,该名称在不同版本之间不会有所不同.
特别是,即使文档说更喜欢toString(),Java自己的StandardLocation枚举name也会在我认为文档建议不同时使用.
public String getName() { return name(); }
Run Code Online (Sandbox Code Playgroud)
另外Enum实现toString()为,
public String toString() {
return name;
}
Run Code Online (Sandbox Code Playgroud)
我无法想到用户定义的枚举会覆盖的toString()情况name(),toString()并且几乎总是完全相同.
name()是一个坏主意?java.lang.Enum.toString()会这样?我是一名计算机科学专业的学生,所以我不知道那么多.
我最近和一位刚接受(java)软件开发人员工作的朋友谈话.他告诉我,在他的工作中,有一个人在C++方面很有经验,但不幸的是,每当他用java编写代码时,他都会使用try-catch来控制程序的流程.据我的朋友说,这是一种错误的Java风格.这是真的?在C++和Java之间使用try-catch(最终在java中)有什么不同(如果有的话)?
我需要查找给定的String是否不在的列表中ENUMs。
这些Strings带有空格,例如:“儿童护理”,“信用卡”等。
除以外的任何其他ExpenseType映射都应映射到。应该完全忽略。OTHERHOAHOA
我的ENUM如下:
public enum ExpenseType {
AUTOLOAN("AUTO LOAN"),
ALIMONY("ALIMONY"),
CHILDCARE("CHILD CARE"),
CREDITCARDS("CREDIT CARDS"),
INSTALLMENTLOANS("INSTALLMENT LOANS"),
FOOD("FOOD"),
UTILITIES("UTILITIES"),
TRANSPORTATION("TRANSPORTATION"),
OTHER("OTHER");
private String expenseType;
ExpenseType(String expenseType) {
this.expenseType = expenseType;
}
@Override public String toString() {
return this.expenseType;
}
}
Run Code Online (Sandbox Code Playgroud)
我现在这样做的方式如下:
String expenseDescription = expense.getExpenseDesc().replaceAll(" ", "");
if(EnumUtils.isValidEnum(ExpenseType.class, expenseDescription)) {
monthlyExpenses.setType(ExpenseType.valueOf(expenseDescription).toString());
}
else if(!expenseDescription.equals("HOA")) {
monthlyExpenses.setType(ExpenseType.OTHER.toString());
}
Run Code Online (Sandbox Code Playgroud)
有人知道更好的方法吗?
在我的应用程序中,如果输入匹配某些特定的20个条目,我需要分支.
我想过使用枚举
public enum dateRule { is_on, is_not_on, is_before,...}
Run Code Online (Sandbox Code Playgroud)
并打开枚举常量来执行一个函数
switch(dateRule.valueOf(input))
{
case is_on :
case is_not_on :
case is_before :
.
.
.
// function()
break;
}
Run Code Online (Sandbox Code Playgroud)
但是输入字符串将像'is on','is not on','is before'等,而不是_之间的_.我了解到枚举不能包含包含空格的常量.
可能的方法我可以说出来:
1,使用if语句比较给出long if语句的20个可能输入
if(input.equals("is on") ||
input.equals("is not on") ||
input.equals("is before") ...) { // function() }
Run Code Online (Sandbox Code Playgroud)
2,处理输入以在单词之间插入_,但即使是不属于此20的其他输入字符串也可以有多个单词.
有没有更好的方法来实现这个?