相关疑难解决方法(0)

`Enum.name()`和`Enum.toString()`有什么区别?

阅读文档后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()并且几乎总是完全相同.

  1. 你能解释为什么忽略文档并总是使用name()是一个坏主意?
  2. "从发布到发布不会有所不同"这句话怎么样?如果名称不会改变,它是否暗示java.lang.Enum.toString()会这样?

java enums

107
推荐指数
3
解决办法
11万
查看次数

不同风格的程序流程?

我是一名计算机科学专业的学生,​​所以我不知道那么多.

我最近和一位刚接受(java)软件开发人员工作的朋友谈话.他告诉我,在他的工作中,有一个人在C++方面很有经验,但不幸的是,每当他用java编写代码时,他都会使用try-catch来控制程序的流程.据我的朋友说,这是一种错误的Java风格.这是真的?在C++和Java之间使用try-catch(最终在java中)有什么不同(如果有的话)?

c++ java

17
推荐指数
3
解决办法
1591
查看次数

查找String是否不在ENUM列表中的最佳方法

我需要查找给定的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)

有人知道更好的方法吗?

java enums

6
推荐指数
1
解决办法
137
查看次数

复杂的if()或enum?

在我的应用程序中,如果输入匹配某些特定的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的其他输入字符串也可以有多个单词.

有没有更好的方法来实现这个?

java enums

5
推荐指数
1
解决办法
784
查看次数

标签 统计

java ×4

enums ×3

c++ ×1