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,并不会报错