java.lang.IllegalAccessException 没有访问权限
今天利用java高级特性反射,操作泛型化对象的私有方法时报错,记录分析过程。
java.lang.IllegalAccessException: Class com.base.Basedao can not access a member of class com.entity.Person with modifiers "private" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
IllegalAccessException 表示没有访问权限的异常。
com.base.Basedao 类无法访问 com.entity.Person 中的私有方法。
Class com.base.Basedao can not access a member of class com.entity.Person with modifiers “private”
这次权限访问异常,是因为自己在用反射获取实体类对象的时候没有去除权限,也就是method.setAccessible(true);
com.entity.Person
package com.entity.Person;
public class AifacePerson {
private void setDefaultValue(){
log.info("do setDefaultValue...");
}
}
com.entity.Basedao
package com.entity.Basedao;
public abstract class AbstractService{
public <T extends BaseEntityModel> Serializable save(T entity) {
Class clz = entity.getClass();
String className = clz.getName();
try {
Method method = clz.getDeclaredMethod("setDefaultValue");
Object o = clz.newInstance();
// method.setAccessible(true);
method.invoke(o);
} catch (NoSuchMethodException e) {
log.error("Error:",e);
} catch (IllegalAccessException e) {
log.error("Error:",e);
} catch (InstantiationException e) {
log.error("Error:",e);
} catch (InvocationTargetException e) {
log.error("Error:",e);
}
}
}
把上面Basedao代码中的注释打开,问题解决。
天下英雄出我辈,一入江湖岁月催
我是爱生活的「无间行者」,努力把实践过的解决方案分享给大家
如果这篇文章对你有用,一个赞、一个评论、一个关注,我都很开心,给点鼓励吧,让我知道你在看。