使用枚举来指定类子类型是否可以接受?

时间:2018-01-25 10:27:37

标签: java oop

在java中是否可以使用枚举字段来指定类子类型?
在我的情况下,类型不多(少于20个) 或者使用继承或内部类更好?

目标类:

package example;

public class Event{
    private EventType eventType;
    //...
}
带有子类型的

枚举:

package example;

public enum EventType{
    TYPE_1,
    TYPE_2,
    TYPE_3,
    //...
    TYPE_N
}

1 个答案:

答案 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;
     }
}