在java中是否可以使用枚举字段来指定类子类型?
在我的情况下,类型不多(少于20个)
或者使用继承或内部类更好?
目标类:
package example;
public class Event{
private EventType eventType;
//...
}
带有子类型的枚举:
package example;
public enum EventType{
TYPE_1,
TYPE_2,
TYPE_3,
//...
TYPE_N
}
答案 0 :(得分:2)
通常,最好使用来自OOP视图的多态来向事件添加不同的行为。因此,创建多个Event类更好。使用枚举,每次要添加特殊情况时,最终都会使用switch和if / else语句,因此代码将变得不易维护,如下所示:
public void doSomething() {
if(eventType == EVENT_1) {
....
} else if (eventType == EVENT_2) {
....
}
}
另一种解决方案是创建枚举,但行为如下:
public enum EventType {
FREE_EVENT, // Use default implementations for methods
CHARITY_EVENT {
public void isFree() {
return false;
}
public int cost() {
return 1000;
}
};
public boolean isFree() {
return true;
}
public int cost() {
return 0;
}
}