在Java中使用枚举字段指定类子类型是否可以接受?
就我而言,类型不多(少于20)。
还是使用继承或内部类更好?

目标类别:

package example;

public class Event{
    private EventType eventType;
    //...
}


具有子类型的枚举:

package example;

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

最佳答案

通常,从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;
     }
}

关于java - 使用枚举指定类子类型是否可以接受?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48440637/

10-11 22:10
查看更多