在Java中如何输出Enum类型中定义的字符串值?

在写程序的时候, 会经常需要用到Enum类型.

之前就碰到过需要输出Enum定义中的字符串的问题, 当时是解决了; 只是, 这次再碰上同样的问题, 又不记得要怎么解决了.

所以趁着这次的机会, 好好查了一下解决方案, 再记录下来.

假设有以下Enum定义:

public enum DateType{
  YEAR,
  MONTH,
  DAY
}

如果想要输出 YEAR/MONTH/DAY 的话, 其实方法很简单, 直接调用 name() 或者 toString() 就可以了.

DateType.YEAR.name();
// DateType.YEAR.toString();

这两个方法都能返回定义里面的字符串, 但是一般建议是使用 toString() 方法. 因为 name() 是个 final 的方法, 默认返回的是 Enum 中定义的字段(如上例中的 YEAR , 返回的就是 YEAR ). 而 toString() 方法是可以被重载的, 默认情况下, 返回的内容和 name() 方法是一致的.

比如, 想要 YEAR 能够输出 Year 的时候, 就需要重载 toString() 方法了.

@Override
public String toString() {
  return name().charAt(0) + name().substring(1).toLowerCase();
}

Enum 还有一种定义方式如下:

public enum DateType{
  YEAR("Year"),
  MONTH("Month"),
  DAY("Day")
}

使用这种方式的时候, 需要注意一点——需要实现包含一个 String 参数的构造函数.

不过这种情况下, 是否需要重载 toString() 方法才能输出 “Year” 我没有测试过, 有感兴趣的可以去试验一下.

参考:

Java enum – why use toString instead of name

Best way to create enum of strings?

发表评论

电子邮件地址不会被公开。 必填项已用*标注