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