3

例如,请参见下面的代码:

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

4 回答 4

5

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

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

于 2013-04-25T11:42:48.697 回答
3

总是制作 enum fields final,然后删除 setter 的实用程序。该enum实例是公开共享的,并且大多数明智的客户端代码都希望它是不可变的。

就 getter 而言,这取决于您的个人喜好,尽管惯例有它添加一个 getter 并使该字段私有。所以你的口味必须“强烈”。

于 2013-04-25T11:42:32.600 回答
1

使用 getter 是惯例……如果您以后在 jstl/el 中使用依赖于使用 getters/is 的 bean 规范的枚举,您将不会得到任何令人讨厌的惊喜。

于 2013-04-25T11:45:37.953 回答
1

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

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

于 2013-04-25T11:54:14.610 回答