如何通过字符串形式的变量名从List<Contact>中获取指定属性值
动态获取Java对象指定属性的实现方法
需求说明
现有基于数据库生成的List<Contact>类型集合contactList,Contact类包含name、phone、email等多个String类型属性。需要实现通过字符串格式的属性名,直接获取集合中指定对象的对应属性值,无需编写十余个if分支逐个匹配属性名。
实现方案
这里采用属性名-取值函数映射表的方式实现,相比反射方案性能更高、逻辑更可控,不需要引入第三方依赖:
- 提前初始化一个Map,key为属性名的字符串形式,value为对应属性的取值函数
- 需要取值时,直接通过属性名从Map中获取对应的取值函数,传入目标Contact对象即可拿到属性值,后续新增属性仅需要在Map中加一行配置即可,无需修改取值逻辑。
已验证可用的完整代码
import java.util.HashMap; import java.util.Map; import java.util.function.Function; // 定义属性名与取值逻辑的映射表 private Map<String, Function<Contact, String>> attrGetterMap; // 初始化映射表 attrGetterMap = new HashMap<>(); attrGetterMap.put("Name", c -> c.name); attrGetterMap.put("Phone", c -> c.phone); attrGetterMap.put("Email", c -> c.email); // 取值示例:second_value为传入的属性名字符串,position为集合中目标对象的下标 String targetValue = attrGetterMap.get(second_value).apply(contactList.get(position));
内容的提问来源于stack exchange,提问作者Askabius
相关产品推荐
相关产品推荐

