是否应通过“get”方法或公共最终字段或两者来检索Java枚举常量?

时间:2013-04-25 11:39:17

标签: java enums

参见下面的代码:

public enum Employees {  

    BOB("Bob Barker", "BB", 100);    

    private String fullName; //are these better accessed through public or getFullName() below? 
    private String initials;
    private String age;  

    Employees(String fullName, String initials, int age) {  
        this.fullName = fullName;
        this.initials = initials;
        this.age = age;
    }  

    public String getFullName() {  
        return fullName;
    }  
    //etc ...
}

哪种方法可以访问更正确或更高效的内存?

4 个答案:

答案 0 :(得分:5)

您无法通过fullName方法访问static。它们是实例字段。

您的代码是正确的。您可能希望将字符串字段标记为final并摆脱setXXX方法(因为Enum值传统上是不可变的。)

答案 1 :(得分:3)

总是创建枚举字段final,然后删除setter的实用程序。 enum实例是公开共享的,并且预计大多数合理的客户端代码都是不可变的。

就吸气剂而言,这取决于您的个人品味,尽管惯例是添加吸气剂并使该领域保密。所以你的品味必须“强大”。

答案 2 :(得分:1)

使用getter它的约定...如果你以后使用jstl / el中的enum依赖于使用getters /的bean规范,你将不会得到任何令人讨厌的惊喜。

答案 3 :(得分:1)

我认为你误解了枚举的概念。枚举是一个不会改变的共享实例。您描述的是一个常规的可变Java对象。因此,您应该做的第一件事是从enum切换到class

public class Employee {  

    private String fullName;
    private String initials;
    private String age;  

    public Employee(String fullName, String initials, int age) {  
        this.fullName = fullName;
        this.initials = initials;
        this.age = age;
    }  

    public String getFullName() {  
        return fullName;
    }  
    //etc ...
}

然后像普通班一样使用你的班级:

Employee bob = new Employee("Bob Barker", "BB", 100);

修改

你现在已经移除了你的二传手,但是,这对我来说仍然不像enum