如何将枚举声明为类型?

How to declare enum as a type?

我正在创建一个 ,其中包含一个参数为 enum

的函数
public class Service
{
    public static void setServiceMode(SERVICE_MODE mode)
   {

   }
}

现在,我有一个 project 正在导入上述库,并调用“setServiceMode”函数如下

Service.setServiceMode(SERVICE_MODE.LOGIN)

我的问题是在哪里声明枚举 (SERVICE_MODE),因为我必须在库函数参数中传递它,而枚举的值是项目特定的。 我不想更改我的图书馆。如何在 java 中实现这一目标?

SERVICE_MODE 需要包含在两个应用程序共享的库中

您的服务 class 将无法编译,除非 SERVICE_MODE 枚举位于 class 路径中。由于这种强烈的依赖性​​,最好的办法是将该枚举添加到您的库中。如果你不能这样做,那么创建一个新的库,这将是你的依赖。

您可以让图书馆只接受 任何 enum 如果可以的话:

public class Service {

    public static <E extends Enum<E>> void setServiceMode(E mode) {

    }

    // Or a pre-generics version.
    public static void setServiceMode2(Enum mode) {

    }
}

public enum SERVICE_MODE {

    LOGIN,
    LOGOUT;
}

public void test() {
    Service.setServiceMode(SERVICE_MODE.LOGIN);
    Service.setServiceMode2(SERVICE_MODE.LOGIN);
}

建议在需要可扩展枚举的地方使用接口。以下是为您提供正确类型约束的设置大纲。在您的图书馆中,定义

interface ServiceMode<E extends Enum<E> & ServiceMode<E>> {}

并将您发布的方法声明为

public static <E extends Enum<E> & ServiceMode<E>> void setServiceMode(E mode) {}

在您的客户端代码中,定义一个枚举:

enum MyServiceMode implements ServiceMode<MyServiceMode> {}

ServiceMode 上绑定的类型保证它只能由实现它的枚举参数化,并且传递给 setServiceMode 的类型的附加约束保证它是 [= 的子类型13=]自己参数化。