我正在创建库,其中包含一个参数为枚举
的函数public class Service
{
public static void setServiceMode(SERVICE_MODE mode)
{
}
}
现在,我有一个项目,它正在导入上面的库,并调用" setServiceMode "功能如下
Service.setServiceMode(SERVICE_MODE.LOGIN)
我的问题是在哪里声明枚举(SERVICE_MODE),因为我必须在库函数参数中传递它,而枚举值是项目特定的。 我不想在我的图书馆中进行更改。如何在java中实现这一点?
答案 0 :(得分:2)
如果可以接受,您可以让图书馆接受任何 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);
}
答案 1 :(得分:1)
SERVICE_MODE
将需要包含在两个应用程序共享的库中
答案 2 :(得分:1)
建议使用需要可扩展枚举的接口。以下是设置的概述,为您提供正确的类型约束。在您的库中,定义
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
的类型的附加约束保证它是ServiceMode
的子类型自己参数化。
答案 3 :(得分:0)
除非SERVICE_MODE枚举位于类路径中,否则您的Service类将无法编译。由于这种强烈的依赖性,最好的想法是将枚举添加到您的库中。如果你不能这样做,那么创建一个新的库,这将是你的依赖。