java - 将枚举值与类字段匹配

标签 java oop java-8 enums switch-statement

我有一个 JAVA 枚举和 POJO 类。在枚举类中,每个枚举值与 POJO 类的变量匹配...然后我想在两个类之间创建关系。

枚举类:

public enum MyEnum
{
   FIELD1,
   FIELD2,
   FIELD3,
   ...
}

POJO 类:

public class MyPojo
{
   private String field1;
   private String field2_not_ref;
   private String field3;
   ...
}

然后,当我尝试匹配两个类的这些字段时,我实现了如下代码:

public String matchMethod(MyEnum myenum)
{
  switch(myenum)
  {
   case FIELD1:
      return field1;
   case FIELD2:
      return field2_not_ref;
    ...
  }
}

我认为这不是一个好的/明确的解决方案。有什么建议吗?

最佳答案

与在枚举上定义方法相比,为了避免反射(这可能会很慢并使事情变得更简洁),您可以创建一个带有一个字段的枚举,该字段是一个使用 MyPojo 并返回 字符串:

public enum MyEnum {
    FIELD1(MyPojo::getField1),
    FIELD2(MyPojo::getField2),
    FIELD3(MyPojo::getField3);

    private final Function<MyPojo, String> getField;

    MyEnum(Function<MyPojo, String> getField) {
        this.getField = getField;
    }
}

然后你可以通过以下方式调用它:

public static void main(String[] args) {
    MyPojo myPojo = new MyPojo("f1", "f2", "f3");
    System.out.println(MyEnum.FIELD2.getGetField().apply(myPojo));
}

如果您不想将其用作带有 apply 方法的 Function 变量,您可以在 enum 上创建一个函数,即可实现:

public enum MyEnum {
    FIELD1(MyPojo::getField1),
    FIELD2(MyPojo::getField2),
    FIELD3(MyPojo::getField3);

    private final Function<MyPojo, String> getField;

    MyEnum(Function<MyPojo, String> getField) {
        this.getField = getField;
    }

    String getFieldFromMyPojo(MyPojo myPojo) { return getField.apply(myPojo); }
}

并像这样调用它:

public static void main(String[] args) {
    MyPojo myPojo = new MyPojo("f1", "f2", "f3");
    System.out.println(MyEnum.FIELD2.getFieldFromMyPojo(myPojo));
}

为简洁起见,省略了 getter 和 setter。

关于java - 将枚举值与类字段匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59775878/

相关文章:

java - 将参数从 build.xml 传递到 java 文件

java - 如何将多个参数从 Jolie 传递到嵌入式 Java 服务?

c++ - 如何安全地将包含的对象(菜单项)与需要容器(菜单)的 API 同步?

java - 父类(super class)实例数组

c# - 我应该在部分类中分离属性和方法吗?

java - 如何使用流比较两个列表?

java - 将 join 与迭代器和 String 函数一起使用

java - 以编程方式反编译 .class 文件

java - 无法读取架构文档 'http://www.springframework.org/schema/tool/spring-tool-4.1.xsd'

java - 关于 Stream - IZ0-809 考试中 OCPJP 8 考试主题中提到的不存在的 merge() 方法