现在,我有两个 Enum
s 只需要有同步值,并且它们存在于单独的项目中。我需要找到一些方法从一个枚举 (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);
}
}
当然,这是行不通的,因为值(value)观并没有跨越鸿沟。
同样的推理就是使用 Enum1
在我的代码中,但是两个项目之间的枚举函数需要完全不同。
我正在尝试做的事情是否可行?如果是这样,我怎样才能以(相对)理智的方式完成它?
就上下文而言,这两个程序将这些枚举用于权限模型。系统检查用户是否处于或高于所需的最低权限级别,这可能类似于 Enum1.B
。 .问题是 Enum1
取决于我无法导入包含 Enum2
的项目的类,因为必须将 Java 依赖项与 Enum2
捆绑在一起完全是浪费。的项目,特别是如果该项目因任何原因永远不会被实际使用。
最终,我们将迁移到一个更加理智的权限模型,在这个模型中整个系统将是不必要的,但同时我们需要一些东西来工作,因此需要一个解决方案(或绝对肮脏的 hack)某种形式,只是为了让它现在工作。
最佳答案
我会通过代码生成来解决这个问题。 在包含 Enum2 的项目构建过程中的某处,读取 Enum1 并在生成的源文件夹中创建 Enum2。所有主要的构建系统和 IDE 都在支持生成的代码方面做得很好。
对于实际的代码生成,您基本上有 3 个选择:
- 基于模板,使用 Velocity 或 Moustache 等模板框架
- 基于 AST,使用像 JCodeModel 这样的代码生成器框架
- 自己动手做一些好的旧字符串连接
我有an example project来 self 的一次 session 演讲,其中我展示了如何使用 Groovy 将 JCodeModel 与 Maven 构建集成。您可以将其用作起点。
关于java - 将值从一个枚举导入另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40391954/