getDeclaredField()方法以及NoSuchFieldException异常处理
getDeclaredField()方法以及NoSuchFieldException异常处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
使用getDeclaredField()方法,发现有异常NoSuchFieldException,后续发现是因为实体类使用了extends引起的,就百度了下原因。
发现getDeclaredField()方法只能获取当前类的所有属性,但是不能获取父类的属性
这里引出两个问题,第一个问题:getField()和getDeclaredField()方法是做什么的:
用Class的getField(String name)或getDelaredField(String name)是用来得到目标类的指定属性,返回类型是Field。
第二个问题:getField()和getDeclaredField()方法有什么区别:
getField(String name)只能获取public的字段,包括父类的;
而getDeclaredField(String name)只能获取自己声明的各种字段,包括public,protected,private。
那么解决我遇到的问题有几种方法:
方法1:弃用extends,但是我如果还想继续使用extends怎么办呢,看方法2。
方法2:可以通过getSuperclass()方法获取父类,再调用getDeclaredField()方法。
Field field;try { field = obj.getClass().getDeclaredField(fieldName);} catch (NoSuchFieldException e) { //此处用于解决继承导致的getDeclaredField不能直接获取父类属性的问题 field = obj.getClass().getSuperclass().getDeclaredField(fieldName);}
关于getDeclaredField()方法以及NoSuchFieldException异常处理问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。