Java属性嵌套获取值的实现方式
作者:zhaoyonghenghcl
本文介绍了如何使用MybatisMetaObject类和FieldUtil工具类来简化Java类嵌套获取属性值的过程,通过这种方式,可以避免逐层检查和判空操作,直接从实例对象中获取深层嵌套的属性值,并且在任意一层为空时自动返回null,不会报错
Java属性如何简单嵌套获取值
有时候我们存在某些类嵌套获取值的问题 A->B->C
public class A{
private B b;
//get and set
}
public class B{
private C c;
//get and set
}
public class C{
private String userName;
//get and set
}
如上面代码,类存在嵌套,此时如果想从实例A对象中获取C类中userName的值,就需要一层层去查,并且判空,大致代码如下:
A a = 实例化对象;
if(a != null){
B b = a.getB();
if(b != null){
C c = b.getC();
if(c ! = null){
return c.getUserName();
}
}
}
借助Mybatis MetaObject类获取值
**maven依赖:**
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
import org.apache.ibatis.reflection.DefaultReflectorFactory;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
public class FieldUtil {
/**
* @param object 具体要查询对象 例如 A
* @param objectPath 获取对应的值路径 “b.c.userName”
* @param clazz 返回的实体
* @param <T>
* @return
*/
public static <T> T getObjectValue(Object object,String objectPath,Class<T> clazz){
if(object == null){
return null;
}
MetaObject metaObject = MetaObject.forObject(object, new DefaultObjectFactory(),new DefaultObjectWrapperFactory(),new DefaultReflectorFactory());
return (T)metaObject.getValue(objectPath);
}
}
通过FieldUtil 工具类如果想获取实例A(a)中C类的userName属性直接按如下写即可,
String userName = FieldUtil.getObjectValue(a, “b.c.userName”, String.class);
"b.c.userName"中如果任意一层为空则自动返回null,并不会报错
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
