Java8下无需反射实现基于配置设置POJO指定字段
无需反射实现自定义Builder配置映射
当然可以不用反射实现这个需求。核心思路是基于Lombok生成的TestPOJOBuilder,先统一初始化所有字段为0,再根据传入的配置字符串匹配对应的字段设为1,把配置到字段的映射逻辑完全封装在自定义的builder方法中,使用者只需传入配置字符串即可,无需感知内部映射关系。
代码实现示例
首先是带@Builder注解的TestPOJO类,包含自定义的builder方法:
import lombok.Builder; import lombok.Data; @Data @Builder public class TestPOJO { private int field1; private int field2; private int field3; private int field4; // 自定义配置驱动的builder方法 public static TestPOJOBuilder builder(String config) { // 初始化所有字段为0 TestPOJOBuilder builder = TestPOJO.builder() .field1(0) .field2(0) .field3(0) .field4(0); // 根据配置映射设置对应字段为1 switch (config) { case "Config1": builder.field1(1); break; case "Config2": builder.field2(1); break; case "Config3": case "Config4": builder.field3(1); break; case "Config5": builder.field4(1); break; // 可选:处理非法配置,比如抛出异常或保持全0 default: // throw new IllegalArgumentException("无效配置: " + config); break; } return builder; } }
使用方式
使用者只需传入配置字符串,直接调用build()即可得到目标实例:
// 生成field1为1、其余为0的实例 TestPOJO pojo1 = TestPOJO.builder("Config1").build(); // 生成field3为1、其余为0的实例 TestPOJO pojo3 = TestPOJO.builder("Config4").build();
扩展支持多配置(可选)
如果需要支持传入多个逗号分隔的配置(比如"Config1,Config3"),可以扩展逻辑如下:
public static TestPOJOBuilder builder(String config) { TestPOJOBuilder builder = TestPOJO.builder() .field1(0) .field2(0) .field3(0) .field4(0); String[] configItems = config.split(","); for (String item : configItems) { switch (item.trim()) { case "Config1": builder.field1(1); break; case "Config2": builder.field2(1); break; case "Config3": case "Config4": builder.field3(1); break; case "Config5": builder.field4(1); break; default: // 处理无效配置项 break; } } return builder; }
内容的提问来源于stack exchange,提问作者Belphegor21
相关产品推荐
相关产品推荐

