如何将枚举声明为类型?
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=]自己参数化。
我正在创建一个 库 ,其中包含一个参数为 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=]自己参数化。