Sha*_*Sha 3 java oop enums switch-statement java-8
我在 JAVA 中有一个 enum 和 POJO 类。在枚举类中,每个枚举值都与 POJO 类的变量匹配......然后我想在两个类之间创建关系。
枚举类:
public enum MyEnum
{
FIELD1,
FIELD2,
FIELD3,
...
}
Run Code Online (Sandbox Code Playgroud)
POJO类:
public class MyPojo
{
private String field1;
private String field2_not_ref;
private String field3;
...
}
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试匹配两个类的这些字段时,我实现了如下代码:
public String matchMethod(MyEnum myenum)
{
switch(myenum)
{
case FIELD1:
return field1;
case FIELD2:
return field2_not_ref;
...
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这不是一个好的/明确的解决方案。有什么建议吗?
为了避免反射,这可能比在枚举上定义方法更慢并使事情更简洁,您可以创建一个枚举,其中包含一个函数消耗MyPojo和返回的字段String:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以通过以下方式调用它:
public static void main(String[] args) {
MyPojo myPojo = new MyPojo("f1", "f2", "f3");
System.out.println(MyEnum.FIELD2.getGetField().apply(myPojo));
}
Run Code Online (Sandbox Code Playgroud)
如果您不想将它用作Function带有apply方法的变量,您可以在 en 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); }
}
Run Code Online (Sandbox Code Playgroud)
并像这样调用它:
public static void main(String[] args) {
MyPojo myPojo = new MyPojo("f1", "f2", "f3");
System.out.println(MyEnum.FIELD2.getFieldFromMyPojo(myPojo));
}
Run Code Online (Sandbox Code Playgroud)
为简洁起见,省略了 getter 和 setter。