在Java中最好地使用Enum

时间:2017-04-24 13:19:09

标签: java enums

我在java中理解Enum有些困难。

让我说我有一个枚举

public enum EnumTest {

    TEST1("Test1"),
    TEST2("Test2"),
    TEST3("Test3"),
    TEST4("Test4");

    private final String NAME;

    EnumTest (String n) {
        NAME=n;
    }

    public String getName() {
        return NAME;
    }
}

和客户

public class Client {

    public static void main (String [] args){

        for (EnumTest vet:EnumTest.values()){       
            System.out.println(vet);
        }

        String vett1=EnumTest.TEST1.getName();              
        EnumTest vett2=EnumTest.TEST2;

        System.out.println(vett1);
        System.out.println(vett2);
    }
}

哪一个有正确的声明?

vett1似乎相当......"丑陋"给我,但有最好的输出格式; vett2看起来更干净,但我不知道为什么我不满意。

是否有良好的宣言习惯?

3 个答案:

答案 0 :(得分:2)

写一个新方法toString()以在EnumTest类

上返回Name变量
public String toString() {
    return NAME;
}

答案 1 :(得分:1)

如果你改变了

public String getName() {
    return NAME;
}

public String toString() {
    return NAME;
}

你将获得vett1的输出但你可以在没有显式调用getName()的情况下使用它。

这是因为java调用toString()将枚举成员转换为可以打印出来的字符串。 但是如果你自己没有定义toString()方法,它会在枚举超级计算器上调用toString。

答案 2 :(得分:1)

这取决于你想要实现的目标。在您的代码示例中,您实现了一个名为getName的方法,该方法从枚举中返回私有变量NAME。这是vett1的价值。打印vett2时打印的值与通过在枚举值上调用toStirng()获得的值相同。在这个示例中,两个值的情况不同,但枚举中的实现方法可以做的不仅仅是返回一个名称。它可以返回任何数据类型。所以这真的取决于你想做什么。