参见下面的代码:
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 ...
}
哪种方法可以访问更正确或更高效的内存?
答案 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
。