现在,我有两个Enum
只需要同步值,它们存在于不同的项目中。我需要找到一些方法从一个枚举(Enum1
)中获取值并将它们导入(Enum2
)。
Enum1.java
看起来像什么:
package com.example.hello;
import com.example.foo.SomeClass;
public enum Enum1 {
A(1), B(2), C(3), D(4);
integer i;
Enum1(int ii) {
this.i = ii;
}
public static int getValue(Enum1 e) {
return e.i;
}
public int doSomething() {
return SomeClass.doThings(i);
}
}
与此同时,Enum2.java
(在另一个项目中)目前看起来像这样:
package com.example.world;
import com.example.bar.SomeOtherClass;
import static com.example.hello.Enum1.*;
public enum Enum2 {
// Enums *should* be imported from Enum1
integer i;
Enum2(int ii) {
this.i = ii;
}
public int doSomethingElse() {
return SomeOtherClass.doSomethingElse(i);
}
}
当然,这是行不通的,因为这些价值并没有跨越差距。
同样的原因只是在我的代码中使用Enum1
,但两个项目之间的Enums上的函数需要完全不同。
我尝试做的甚至可能吗?如果是这样,我怎样才能以(相对)理智的方式完成它?
对于上下文,这两个程序将这些枚举用于权限模型。系统会检查用户是否达到或高于所需的最低权限级别,这可能类似于Enum1.B
。问题是Enum1
依赖于我无法导入到包含Enum2
的项目的类,因为将Java依赖项与Enum2
&#捆绑在一起将完全是浪费39;项目,特别是如果该项目由于任何原因永远不会被实际使用。
最终,我们将迁移到一个更加理智的权限模型,在这个模型中,整个系统将是不必要的,但我们需要一些工作在此期间,因此需要一个解决方案(或绝对肮脏的黑客)某种,只是为了让它现在起作用。
答案 0 :(得分:1)
我会通过代码生成来解决这个问题。 在包含Enum2的项目的构建过程中的某个位置,读取Enum1并在生成的源文件夹中创建Enum2。所有主要的构建系统和IDE都在支持生成的代码方面做得很好。
对于实际的代码生成,您基本上有3个选项:
我从我的会议演讲中得到an example project,其中我展示了如何使用Groovy将JCodeModel与Maven构建集成。您可以将它作为起点。