gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:25:37 27 4
gpt4 key购买 nike

我有一个 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/

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