java.lang.IllegalAccessException 没有访问权限

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代码中的注释打开,问题解决。


经验分享 程序员 微信小程序 职场和发展