java类获取a标签的name_获取对象reflect映射属性时java.lang.IllegalAccessException: Class test.ObjectReflectUtils can ...

一、异常描述

在获取对象内部类Student属性属性obj.getClass().getDeclaredFields()的时,报Exception in thread "main" java.lang.IllegalAccessException: Class test.ObjectReflectUtils can not access a member of class test.ObjectReflectUtils$Student with modifiers "private"异常,详情日志如下Exception in thread "main" java.lang.IllegalAccessException: Class test.ObjectReflectUtils can not access a member of class test.ObjectReflectUtils$Student with modifiers "private"@b@at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)@b@at java.lang.reflect.Field.doSecurityCheck(Field.java:960)@b@at java.lang.reflect.Field.getFieldAccessor(Field.java:896)@b@at java.lang.reflect.Field.get(Field.java:358)@b@at test.ObjectReflectUtils.getFieldsMap(ObjectReflectUtils.java:78)@b@at test.ObjectReflectUtils.main(ObjectReflectUtils.java:250)

二、解决方法

1.对象工具类通过内部类Student属性转换getFieldsMap方法处理(完整代码示例参见其他文章页),代码如下public class ObjectReflectUtils { @b@@b@public static Map  getFieldsMap(Object obj) throws  Exception{@b@Field[] fields=obj.getClass().getDeclaredFields();@b@Map fieldMap=new HashMap();@b@for(Field f:fields){ @b@fieldMap.put(f.getName(),f.get(obj));@b@}@b@return fieldMap;@b@}@b@..@b@public  static  class  Student{@b@@b@private  String  name;@b@private  String  classId;@b@@b@public Student() {@b@super();@b@}@b@@b@public Student(String name, String classId) {@b@super();@b@this.name = name;@b@this.classId = classId;@b@}@b@@b@public String getName() {@b@return name;@b@}@b@public void setName(String name) {@b@this.name = name;@b@}@b@public String getClassId() {@b@return classId;@b@}@b@public void setClassId(String classId) {@b@this.classId = classId;@b@}@b@}@b@}

2. 因为对象内部类都是私有方法,因此增加类的f.setAccessible(true);可访问属性处理,如下public class ObjectReflectUtils { @b@@b@public static Map  getFieldsMap(Object obj) throws  Exception{@b@Field[] fields=obj.getClass().getDeclaredFields();@b@Map fieldMap=new HashMap();@b@for(Field f:fields){ @b@@b@boolean accessible = f.isAccessible();@b@if (!accessible) {@b@f.setAccessible(true);@b@}@b@@b@fieldMap.put(f.getName(),f.get(obj));@b@@b@}@b@return fieldMap;@b@}@b@..@b@ @b@}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值