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

标签 java enums

现在,我有两个 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/

相关文章:

java - 为什么我不能在 if 语句中强制转换对象?

java - 当我用 static 声明变量时,我得到了非法的表达式开始?

ios - 如何使枚举符合 Swift 中的可识别协议(protocol)?

swift - 如何在 swift 中声明类型别名和枚举?

powershell - 在 PowerShell 中使用枚举类型

java - Scala 的 TreeSet 与 Java 的 TreeSet - 轮询?

java - 如何将数据插入Hibernate管理的Bridge表或Join表?

java - 对扩展现有枚举类型的泛型感到困惑

java - 使用java将xml转换为xls

java - 如何修复操作 switch 语句