我从来没有用过enums,而且我已经用 Java 编程了两年多了。显然,他们改变了很多。现在他们甚至在自己内部对 OOP 进行了全面的支持。
enum
当变量(尤其是方法参数)只能从一小组可能值中取出一个时,您应该始终使用枚举。例如类型常量(合同状态:“永久”、“临时”、“学徒”)或标志(“立即执行”、“延迟执行”)。
如果您使用枚举而不是整数(或字符串代码),您会增加编译时检查并避免因传递无效常量而导致的错误,并记录哪些值是合法使用的。
顺便说一句,过度使用枚举可能意味着您的方法做得太多(最好有几个单独的方法,而不是一个方法需要几个标志来修改它的功能),但是如果您必须使用标志或类型代码,枚举是要走的路。
例如,哪个更好?
/** Counts number of foobangs. * @param type Type of foobangs to count. Can be 1=green foobangs, * 2=wrinkled foobangs, 3=sweet foobangs, 0=all types. * @return number of foobangs of type */ public int countFoobangs(int type)
相对
/** Types of foobangs. */ public enum FB_TYPE { GREEN, WRINKLED, SWEET, /** special type for all types combined */ ALL; } /** Counts number of foobangs. * @param type Type of foobangs to count * @return number of foobangs of type */ public int countFoobangs(FB_TYPE type)
像这样的方法调用:
int sweetFoobangCount = countFoobangs(3);
然后变成:
int sweetFoobangCount = countFoobangs(FB_TYPE.SWEET);
在第二个示例中,可以立即明确哪些类型是允许的,文档和实现不能不同步,编译器可以强制执行此操作。此外,一个无效的电话,如
int sweetFoobangCount = countFoobangs(99);
不再可能。