import lombok.Data;
import java.util.List;
@Data
public class User6 {
private Long id;
private String name;
private String descr;
//持有静态内部类属性,用于获取静态内部类数据
private List<Item> itemList;
@Data
public static class Item{
private String itemName;
}
}
public void reflectClassWithList(Object object,Class clazz){
try {
for (Field field:clazz.getDeclaredFields()){
//设置可访问属性
field.setAccessible(true);
// log.info("modifier:{}",field.getModifiers());
Object fieldValue = field.get(object);
if (fieldValue != null && !isBaseType(fieldValue)){
if (fieldValue instanceof List){
for (int i = 0; i < ((List<?>) fieldValue).size(); i++) {
Object listSubObject = ((List<?>) fieldValue).get(i);
reflectClassWithList(listSubObject, listSubObject.getClass());
}
}else {
reflectClassWithList(fieldValue,fieldValue.getClass());
}
}
log.info("fieldName:{},fieldValue:{}",field.getName(),fieldValue);
}
}catch (Exception e){
e.printStackTrace();
}
}
private static void testUser6(){
log.info("test 反射获取静态内部类的私有属性 start ..");
User6 user6 = new User6();
user6.setName("perry");
//静态内部类
List<User6.Item> items = Lists.newArrayList();
User6.Item item = new User6.Item();
item.setItemName("new item");
items.add(item);
user6.setItemList(items);
ReflectClass reflectClass = new ReflectClass();
//注意调用对象
reflectClass.reflectClassWithList(user6, User6.class);
log.info("test 反射获取静态内部类的私有属性 end ..");
}
13:49:33.703 [main] INFO com.perry.reflect.test.ReflectClass - test 反射获取静态内部类的私有属性 start ..
13:49:33.711 [main] INFO com.perry.reflect.test.ReflectClass - fieldName:id,fieldValue:null
13:49:33.713 [main] INFO com.perry.reflect.test.ReflectClass - fieldName:name,fieldValue:perry
13:49:33.713 [main] INFO com.perry.reflect.test.ReflectClass - fieldName:descr,fieldValue:null
13:49:33.713 [main] INFO com.perry.reflect.test.ReflectClass - fieldName:itemName,fieldValue:new item
13:49:33.713 [main] INFO com.perry.reflect.test.ReflectClass - fieldName:itemList,fieldValue:[User6.Item(itemName=new item)]
13:49:33.713 [main] INFO com.perry.reflect.test.ReflectClass - test 反射获取静态内部类的私有属性 end ..
import lombok.Data;
@Data
public class User7 {
private Long id;
private String name;
private String descr;
private Role role;
@Data
class Role {
private String roleName;
}
}
public void reflectClassWithNewInnerClass(Object object,Class clazz){
try {
for (Field field:clazz.getDeclaredFields()){
//设置可访问属性
field.setAccessible(true);
// log.info("modifier:{}",field.getModifiers());
Object fieldValue = field.get(object);
if (fieldValue != null && !isBaseType(fieldValue) && field.getModifiers() == Modifier.PRIVATE){
reflectClassWithNewInnerClass(fieldValue,fieldValue.getClass());
}
log.info("fieldName:{},fieldValue:{}",field.getName(),fieldValue);
}
}catch (Exception e){
e.printStackTrace();
}
}
private static void testUser7(){
log.info("test 反射获取内部类的私有属性,主类持有内部类属性 start ..");
User7 user7 = new User7();
user7.setName("perry");
//内部类
User7.Role role = user7.new Role();
role.setRoleName("管理员");
user7.setRole(role);
ReflectClass reflectClass = new ReflectClass();
//注意调用对象
reflectClass.reflectClassWithNewInnerClass(user7, User7.class);
log.info("test 反射获取内部类的私有属性,主类持有内部类属性 end ..");
}
原文:https://www.cnblogs.com/perry666/p/14966271.html