繁体   English   中英

如何将全局枚举作为多个类的子类?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM