在Java中使用枚举切换语句

时间:2014-02-08 15:08:39

标签: java enums

我希望有人能指引我走向正确的方向。

我在枚举中有以下代码,包含部门名称及其代码。我希望能够在屏幕上打印部门的全名及其说明。我想通过使用switch语句来实现这一点,但我不确定在何处放置switch语句。

enum DepartmentName {
     FINANCE        ("FIN")
   , SALES          ("SAL")
   , PAYROLL        ("PYR")
   , LOGISTIC       ("LGT")
   ;

    private final String department;

    DepartmentName(String abbr) {
        department = abbr;
    }

    public String getDepartmentCode() {return department;}

    @Override
    public String toString() {
        return "The department name is " + getDepartmentCode();
    }
}

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

  

我希望能够在屏幕上打印部门的全名及其说明。

您需要将全名与每个enum值相关联。最简单的方法是将description成员添加到enum

enum DepartmentName {
     FINANCE        ("FIN", "Finance")
   , SALES          ("SAL", "Sales")
   , PAYROLL        ("PYR", "Payroll")
   , LOGISTIC       ("LGT", "Logistic")
   ;

    private final String department;
    private final String description;

    DepartmentName(String abbr, String full) {
        department = abbr;
        description = full;
    }

    public String getDepartmentCode() {return department;}

    public String getDescription() {return description;}

    @Override
    public String toString() {
        return "The department name is " + getDepartmentCode();
    }
}
  

我想通过使用switch语句

来实现这一目标

这样做是错误的,因为与名称的关联将在enum的外部(即不再被封装)。这样做的结果是,每次添加新的enum成员时,依赖于switches的所有enum都需要更改。此外,编译器无法帮助您捕获错过新enum值的位置。

答案 1 :(得分:1)

To String应该遵循:

public String toString() {
    switch (this) {
        case FINANCE:
            return "finance";
        case SALES:
            return "sales";
        case PAYROLL:
            return "payroll";
        ... // and so on
    }
    return this.name();
}