枚举练习 - 在课堂内/单独定义,制作公共/私人

时间:2011-06-26 12:47:05

标签: java enums

定义枚举时的好习惯是什么?

例如,我有一个Person类。对于本课程,我选择使用值为MALE和FEMALE的枚举。

枚举应该在Person类中定义还是单独定义?枚举应该定义为私有还是公共?另外,您是否有任何进一步的建议可以使枚举尽可能灵活?

2 个答案:

答案 0 :(得分:9)

恕我直言,在public static enum内加class Person

原因是enum Gender仅适用于Person,所以将它放在那里以便它们被绑定在一起(没有Person的上下文,性别没有用)。

好处:

  • 减少阶级膨胀
  • 如果您将Person移动到另一个包/项目,Gender将始终随身携带
  • 作为唯一用户的人有“控制”它并可能根据需要改变它,例如
    • 添加private List<HealthIssue> genderSpecificHealthIssues;
    • 添加更多枚举,例如TRANSGENDERINTERSEX或其他

唯一的缺点是你必须使用static导入才能使用它,即import static com.company.Person.Gender.*;

在许多JDK类中都可以看到这种模式,例如Calendar,它定义了在类中使用的许多与日期相关的常量。

答案 1 :(得分:3)

要获得完全的灵活性,请将其添加到静态类中。但当然,这仅适用于需要在整个应用程序中使用的枚举。对于本地和专业的枚举,最好让它们“接近”它们的使用位置。 Exampli gratia ,我有一个IPHandler类,它使IPv4和IPv6地址的处理,解析和转换对类用户透明(IPHandler是一个静态类)。它有一个枚举IPType,其值为IPv4和IPv6,仅在IPHandler中用于多个操作。由于它没有在其他地方使用,因此它已在IPHandler类中定义。