因此,我有一个名为optionType的字段,我希望它能够接受与某些选项对应的4个不同的整数值。例如,optionType =0表示用户希望以某种方式处理某事,optionType =1表示另一种方式,等等。
但是数字本身是没有意义的,所以我想在类中定义常量。
public class MyClass {
public static final int OPTION_TYPE_DO_THIS = 0;
public static final int OPTION_TYPE_DO_THAT = 1;
public static final int OPTION_TYPE_DO_SOMETHING_ELSE = 2;
public static final int OPTION_TYPE_DO_COOL_THING = 3;
private int optionType;
....这样定义所有常量被认为是正常的,还是使用枚举更好呢?
public enum OPTION_TYPE {DO_THIS, DO_THAT, DO_SOMETHING_ELSE, DO_COOL_THING};还是我应该以某种方式使用Enum?
发布于 2016-11-02 19:00:19
重点是“如何在运行时使用这些信息”。你看,如果你开始考虑写代码,比如
switch(someEnum) {
case DO_THIS: ...
case DO_THAT:..。那你已经走错方向了!
要点是:经常认为枚举(或它们更低水平的数值常数表亲)是表达这种设计的好方法。
但这实际上导致了一些问题。通常情况下,更好的“OO”方式是使用带有特定子类的抽象基类;换句话说:多态!
编辑:只是为了让这更清楚..。使用枚举进行“单一”切换并不是真正的问题。但是很多时候,人们在代码中的很多地方都会切换他们的枚举。当您创建额外的枚举常量时,所有这些地方都可能需要更新。我的一位同事称这为“圈套”。
发布于 2016-11-02 18:50:23
发布于 2016-11-02 18:58:29
在java中,enum不仅仅是其他语言中的“枚举名称”(例如在C/C++中)。
我的首选用途是提供无状态行为:
class Calculator {
enum Operation {
ADD{
double calculate(double a, double b){ return a + b;}
}
SUB{
double calculate(double a, double b){ return a - b;}
}
MUL{
double calculate(double a, double b){ return a * b;}
}
DIV{
double calculate(double a, double b){ return a / b;}
}
abstract double calculate(double a, double b);
}
Map<String,Operation> operations = new HashMap<>();
Calculator(){
operations.put("+",ADD);
operations.put("-",SUB);
operations.put("*",MUL);
operations.put("/",DIV);
}
public double calculate(double a, String operation, double b){
return operations.get(operation).calculate(a,b);
}
}https://stackoverflow.com/questions/40387529
复制相似问题