反射之IllegalAccessException、NoSuchFieldException

1. IllegalAccessException

使用反射访问对象的私有属性,正常代码如下:

			Field field = obj.getClass().getDeclaredField(fieldName);
			field.setAccessible(true); // 设置对象的访问权限,保证对private的属性的访问
			String result=(String) field.get(obj);

此时,如果没有写field.setAccessible(true);这一行代码,会导致IllegalAccessException异常,表示没有访问权限。

所以要通过添加field.setAccessible(true);,获取对私有属性的访问权限。

2. NoSuchFieldException

如果在编写代码时,将getDeclaredField写为getFeild,如下:

			Field field = obj.getClass().getField(fieldName);
			field.setAccessible(true); // 设置对象的访问权限,保证对private的属性的访问
			String result=(String) field.get(obj);

则会产生NoSuchFieldException异常,表示没有相应属性,因为feildName字段是私有的,通过getFeild方法是获取不到的。

而getDeclaredField可以获取私有、保护、公开属性。


如有问题请扫码联系我
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页