已解决java.lang.IllegalAccessException异常 一、问题分析背景 在Java开发中,java.lang.IllegalAccessException是一个常见的运行时异常, Field field = MyClass.class.getDeclaredField("privateField"); // 这里没有设置field为可访问,将会抛出IllegalAccessException } } 上述代码中,由于我们试图通过反射访问MyClass的私有字段privateField,但没有将字段设置为可访问(即调用field.setAccessible(true)),所以会抛出IllegalAccessException } } 在上面的修正后的代码中,我们调用了field.setAccessible(true)来允许访问私有字段,从而避免了IllegalAccessException。
今天和小伙伴讨论一个mybatis-plus的一个诡异问题,最后定位到原因竟然是lombok@Data和@Builder一起用无法添加无参构造方法引起的,非常隐蔽。
java.lang.IllegalAccessException: void #####.MyBroadcastReceiver. <init>() is not accessible from jav 遇到这种问题我更正的方法是,构造函数中,不能用private修饰 更改为public就可以了 遇到错误 java.lang.IllegalAccessException accessible from class android.app.ActivityThread,主要是app中其他地方调用了默认的构造函数,必须增加默认构造函数且访问权限为public java.lang.IllegalAccessException
BeanUtils.getIndexedProperty(dog, "hobbies[0]"); System.out.println(name); // swimming } catch (IllegalAccessException BeanUtils.getIndexedProperty(dog, "hobbies", 0); System.out.println(hobby); // swimming } catch (IllegalAccessException = BeanUtils.getProperty(dog, "habits.smoking"); System.out.println(habit); // tobacco } catch (IllegalAccessException = BeanUtils.getNestedProperty(dog, "son.name"); System.out.println(name); // 小狗的儿子dog1 } catch (IllegalAccessException String name = BeanUtils.getProperty(dog, "name"); System.out.println(name); // 小狗 } catch (IllegalAccessException
Student.Friend(name=刘备, age=26, address=北京), hobbies=[篮球, 足球], schoolMap={大学=某大学, 高中=某高中}) } catch (IllegalAccessException , 高中=某高中} // class:class com.zibo.zibo2022.property_utils.entity.Student // age:22 } catch (IllegalAccessException student, "hobbies[0]", "da篮球"); System.out.println(student.getHobbies()); // [da篮球, 足球] } catch (IllegalAccessException ", "大学", "某da大学"); System.out.println(student.getSchoolMap()); // {大学=某da大学, 高中=某da高中} } catch (IllegalAccessException class:class com.zibo.zibo2022.property_utils.entity.Student // age:22 } catch (IllegalAccessException
*/ public Map<String, Object> getValues() throws IllegalAccessException { Map< */ public Map<String, Object> getValues(Object object) throws IllegalAccessException { */ public void putAll(Object object) throws IllegalAccessException, NoSuchFieldException { >> getFields() throws IllegalAccessException { Map<String, Class<? >> getFields(Object object) throws IllegalAccessException { Class<?
getName()); // 李四 System.out.println(student2.getAge()); // 18 } catch (NoSuchMethodException | IllegalAccessException getName()); // 王五 System.out.println(student3.getAge()); // 20 } catch (NoSuchMethodException | IllegalAccessException getName()); // 李四 System.out.println(student5.getAge()); // 18 } catch (NoSuchMethodException | IllegalAccessException getName()); // 王五 System.out.println(student6.getAge()); // 20 } catch (NoSuchMethodException | IllegalAccessException System.out.println(student1.getName()); // 张三 } catch (NoSuchMethodException | IllegalAccessException
* 判断对象是否存在数据库中 * * @param object 对象 * @return true 存在,false 不存在 * @throws IllegalAccessException */ public boolean isObjectExist(Object object) throws IllegalAccessException {} /** ) throws Exception {} /** * 插入多个对象数据 * * @param objectList 对象集合 * @throws IllegalAccessException objectList) throws Exception {} /** * 更新对象 * * @param object 对象 * @throws IllegalAccessException Exception {} /** * 删除多个object集合 * * @param objectList object集合 * @throws IllegalAccessException
> clazz) throws NoSuchFieldException, InstantiationException, ParseException, IllegalAccessException * 判断对象是否存在数据库中 * * @param object 对象 * @return true 存在,false 不存在 * @throws IllegalAccessException */ public boolean isObjectExist(Object object) throws IllegalAccessException {} /** ) throws Exception {} /** * 插入多个对象数据 * * @param objectList 对象集合 * @throws IllegalAccessException objectList) throws Exception {} /** * 更新对象 * * @param object 对象 * @throws IllegalAccessException
处理属性操作异常 先看设置属性的方法: public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException 实际上,通过方法注释可以得知会抛出四种异常: IllegalAccessException:非法访问异常,注意它是检查(checked)异常,也就是需要显示捕获,此异常会在修饰符禁用访问的时候抛出,可以通过 属性的获取方法抛出的异常和设置值方法是一致的,这里不做详细展开: public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException IllegalAccessException:非法访问异常。 , IllegalArgumentException, InvocationTargetException 主要包括以下几种异常: IllegalAccessException:非法访问异常。
public static <T> File multipartCreateExcel(List<T> models, String fileName, boolean isFinish) throws IllegalAccessException > File multipartCreateExcel(List<T> models, String fileName, int sheetNum, boolean isFinish) throws IllegalAccessException { if (sheetNum > MAX_ROW_NUM) { throw new IllegalAccessException("sheet rows num More than " + MAX_ROW_NUM <T> SXSSFWorkbook multipartCreateWorkBook(List<T> models, String fileName, int sheetRowNum) throws IllegalAccessException workbook; } private static <T> SXSSFWorkbook createWorkBook(List<T> models, String fileName) throws IllegalAccessException
Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException Caused by: org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object [1] [java.lang.IllegalAccessException var14; } catch (NoSuchMethodException var21) { reason = var21; } catch (IllegalAccessException
*/ public void invoke(MethodInvocation methodInvocation) throws InvocationTargetException, IllegalAccessException MethodInterceptor { public void invoke(MethodInvocation methodInvocation) throws InvocationTargetException, IllegalAccessException MethodInterceptor { public void invoke(MethodInvocation methodInvocation) throws InvocationTargetException, IllegalAccessException interface MethodInvocation { //调用链形成 public void process() throws InvocationTargetException, IllegalAccessException /** * 调用链形成 */ @Override public void process() throws InvocationTargetException, IllegalAccessException
newInstance()方法 ---- newInstance()方法,深入 我们先看一下源码 public T newInstance() throws InstantiationException, IllegalAccessException lookup if (cachedConstructor == null) { if (this == Class.class) { throw new IllegalAccessException * 我们调用Class的getConstructor的 newInstance("dodo"); * 会报错,因为源码中,只有没有写构造的时候,才会按上面的流程走 * @throws IllegalAccessException 个构造的方法试试 /** * DummyClass2 有2个自己的带参数的构造 * 如果通过getConstructors得到构造的数组,在调用对应的构造,传入参数即可 * @throws IllegalAccessException * @throws InstantiationException */ private void doConstructorNewInstance2R1() throws IllegalAccessException
java.lang.reflect.Field} */ public void setByte(Object obj, byte b) throws IllegalArgumentException, IllegalAccessException java.lang.reflect.Field} */ public void setInt(Object obj, int i) throws IllegalArgumentException, IllegalAccessException fieldOffset); } public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException ConstructorAccessor: public T newInstance(Object ... initargs) throws InstantiationException, IllegalAccessException , InvocationTargetException; } public Object invoke(Object obj, Object... args) throws IllegalAccessException
index(); } 3.工具类 public class IBeanUtils<T> { public T fieldSet(T t, String[] dataArray) throws IllegalAccessException } } return t; } private void setVal(T t, Field f, String data) throws IllegalAccessException f.setAccessible(true); f.set(t, data); } public static void main(String[] args) throws IllegalAccessException
现在来反射构造构造器(反射的形式创建实例) public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException 还有一种方式,就是直接通过Class对象创建构造器: public static void main(String[] args) throws IllegalAccessException ,但是反射可以做到: public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException 反射通道的API都很有规律,可读性很强 public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException
next... } private void refreshExpression(DslContext dslContext) throws NoSuchFieldException, IllegalAccessException getProxyBean(Object bean, String beanName, BeanPostProcessor processor) throws NoSuchFieldException, IllegalAccessException private DslListener dslListener; @Test public void test() throws NoSuchFieldException, IllegalAccessException > classType) throws NoSuchFieldException, IllegalAccessException { RootBeanDefinition rootBeanDefinition (beanName); } private void removeBeanDefinitionCache(String beanName) throws NoSuchFieldException, IllegalAccessException
newApplication(ClassLoader cl, String className, Context context) throws InstantiationException, IllegalAccessException > clazz, Context context) throws InstantiationException, IllegalAccessException, newApplication(ClassLoader cl, String className, Context context) throws InstantiationException, IllegalAccessException > clazz, Context context) throws InstantiationException, IllegalAccessException,
paramsObject所声明的字段 * @param paramsObject mapper中paramsType的实例 * @return T * @throws IllegalAccessException 字段不可访问异常 */ <T> T encrypt(Field[] declaredFields, T paramsObject) throws IllegalAccessException paramsObject所声明的字段 * @param paramsObject mapper中paramsType的实例 * @return T * @throws IllegalAccessException 字段不可访问异常 */ <T> T decrypt(T result) throws IllegalAccessException; } 解密接口AES工具解密实现类 public 字段不可访问异常 */ @Override public <T> T decrypt(T result) throws IllegalAccessException {