gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:27 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com