Enum使用name()还是toString()方法

Posted 吕纬甫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Enum使用name()还是toString()方法相关的知识,希望对你有一定的参考价值。

有如下枚举:

enum TurnOnOff{
    ON,OFF;
}

调用TurnOnOff.ON.name()与TurnOnOff.ON.toString()输出都是字符串\'ON\',那枚举里的name()与toString()方法有什么区别呢?尽管两个方法的输出是一样的,但尽量还是使用toString().

我们可以看下ENUM里的源码关于两个方法的描述:

/**
  * Returns the name of this enum constant, exactly as declared in its
  * enum declaration.
  * Most programmers should use the toString method...
  */
public final String name() {
    return name;
}

/**
 * Returns the name of this enum constant, as contained in the
 * declaration.  This method may be overridden...
 */
public String toString() {
    return name;
}

从源码注释上看,两个方法都是返回\'this enum constant,但是name()方法是final而toString()是public,显然final是不可被重写的。针对TurnOnOff这个枚举,我们可以重写下toString()方法:

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

这样就可以自定义枚举值输出的内容了,name()就做不到了。

以上是关于Enum使用name()还是toString()方法的主要内容,如果未能解决你的问题,请参考以下文章

Enum to String 一般用法

C# Enum ToString

java enum类型

枚举ENUM的tostring() valueof()和values()用法

Enum toString

typedef enum和函数声明的问题,程序如下,是我enum语法用错了还是函数声明用错了呢?