java - 将枚举值与类字段匹配
问题描述
我在 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
和返回的函数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;
}
}
然后你可以通过以下方式调用它:
public static void main(String[] args) {
MyPojo myPojo = new MyPojo("f1", "f2", "f3");
System.out.println(MyEnum.FIELD2.getGetField().apply(myPojo));
}
如果您不想将其用作Function
带有方法的变量apply
,则可以在 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。
推荐阅读
- javascript - 暂停和恢复 setTimeout 程序
- spring-cloud-contract - 在端口 -1 上为项目 [] 启动存根服务器
- angular - 角度如何在路由中使用 url 映射组件?
- r - 绘制图表
- python - 如何在同一个图上并排显示直方图条?
- jquery - 使用 datetimepicker 禁用输入字段,仅使用日历图标作为输入
- python - python - 如何根据python中的用户输入选择从多个连接列表中打印随机项目?
- tsql - 检查一个数字是否在一个数组中,该数组是一个 SQL 数据库字段的内容
- javascript - 我正在使用 ReadyAPI 2.6,需要在 JSON 有效负载中创建使用参数
- python - Virtualenv包装器与mac上的python2不兼容?