java – 将值从一个枚举导入到另一个枚举?

现在,我有两个只需要同步值的枚举,它们存在于不同的项目中.我需要找到一些方法从一个枚举(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的项目捆绑在一起将是一个完全的浪费,特别是如果该项目由于任何原因永远不会被实际使用.

最终,我们将迁移到一个更加理智的权限模型,在这个模型中,整个系统将是不必要的,但我们需要在此期间工作,因此需要某种解决方案(或绝对肮脏的黑客),只是为了让它现在起作用.

最佳答案 我会通过代码生成来解决这个问题.

在包含Enum2的项目的构建过程中的某个位置,读取Enum1并在生成的源文件夹中创建Enum2.所有主要的构建系统和IDE都在支持生成的代码方面做得很好.

对于实际的代码生成,您基本上有3个选项:

>基于模板,使用Velocity或Mustache等模板框架
>基于AST,使用像JCodeModel这样的代码生成器框架
>使用良好的旧字符串连接自己动手

我从我的会议谈话中得到了an example project,在那里我展示了如何使用Groovy将JCodeModel与Maven构建集成.您可以将它作为起点.

点赞