[英]How can I present a global enum as a subclass of multiple classes?
我有一个静态最终Java类库,它描述了一系列标准。 其中一个类(简化)的夜晚看起来像:
public static final class ResponseControl {
public static enum EventStatus {
EVENT_RECEIVED,
EVENT_STARTED,
EVENT_COMPLETED;
}
}
将enum EventStatusOption作为ResponseControl类的子类包含在内是很方便的,因为这是它在标准文档中定义的地方,也就是人们在寻找它的地方。 它允许他们说:
if (respCtl.status == ResponseControl.EventStatus.EVENT_STARTED) { ... }
但是我确实有数百个这样的类,并且在某些情况下,在多个类中使用相同的枚举。 能够在其他地方定义枚举会很好,然后做这样的事情:
public static enum GlobalEventStatus {
EVENT_RECEIVED,
EVENT_STARTED,
EVENT_COMPLETED;
}
public static final class ResponseControl {
public static enum EventStatus extends GlobalEventStatus {}
public final EventStatus status;
}
if (respCtl.status == ResponseControl.EventStatus.EVENT_STARTED) { ... }
但是,我不能这样做,因为扩展枚举是不合法的,甚至(在我的情况下)我根本不想扩展它们,我只是想让全局类型可用于当地班级。 有谁知道这样做的方法?
下面ColinD的第二段答案实际上是我需要的答案。 说:
public interface GlobalEvent
{
public static enum Status {
EVENT_RECEIVED,
EVENT_STARTED,
EVENT_COMPLETED;
}
}
public static final class ResponseControl {
public static enum Event implements GlobalEvent
public final Event.Status status;
}
我可以允许我的用户说:
if (respCtl.status == ResponseControl.Event.Status.EVENT_STARTED) { ... }
...同时仍然在一个地方保持实际定义。 谢谢。
只需使用名为EventStatus
的常见顶级类型EventStatus
。 这是正常的,我认为任何Java程序员都不会觉得它让人感到困惑......你想要做的事情听起来更令人困惑。
如果您正在寻找的是一组常见的枚举常量,然后是定义特定于某个类的其他常量的子类......那么,您在那里几乎没有运气。 你不能用枚举做到这一点。 一个选项(不是说它是最好的)将使EventStatus
成为一个接口,然后使GlobalEventStatus
成为实现该接口的枚举。 然后你可以有另一个枚举ResponseControl.Status
或其他一些也实现EventStatus
。
我还应该提到像ResponseControl.EventStatus
这样的东西不是“子类”而是“嵌套类”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.