java反射父类变量_Java反射获取父类中的元素

更新时间:2023-07-15 13:11:02 阅读: 评论:0

java反射⽗类变量_Java反射获取⽗类中的元素
我们知道,可以通过getDeclaredField和getField⽅法可以反射获取class中的元素,他们的区别在于getField只能访问公有变量,⽽getDeclaredField则可以访问定义的所有变量,包括protected修饰和private修饰的变量。
化妆工具// 1.getDeclaredField⽅法调⽤archFields⽅法
Field field = archFields(privateGetDeclaredFields(fal), name);
// 2.getField⽅法剪接调⽤archFields⽅法
if ((res = archFields(privateGetDeclaredFields(true), name)) != null) {
return res;
}
不过,若要访问⽗类中的元素,通过getDeclaredField和getField⽅法就会抛出NoSuchFieldException异常了。也就是说,⽆法直接⽤java.lang.Class中的⽅法去访问⽗类中的元素。Spring中的⼯具类org.sprin
gframework.util.ReflectionUtils提供了findField⽅法,能够取得⽗类中的元素。我们看⼀下其中的实现:
public static Field findField(Class> clazz, String name, Class> type) {
Asrt.isTrue(name != null || type != null, "Either name or type of the field must be specified");小峨眉
Class> archType = clazz;
while (!Object.class.equals(archType) && archType != null) {
// 这⾥⼀次性获取了类中的所有元素
Field[] fields = DeclaredFields();
for (Field field : fields) {
if ((name == null || name.Name())) && (type == null || type.Type()))) {
return field;
}资料员职责
}
// 获取所有⽗类,接着遍历⽗类中的元素。
archType = Superclass();
}
return null;
}
笔者本希望通过getDeclaredField()⽅法直接反射获取class中的元素,不过为了获取其⽗类中的元素使⽤了⼯具类ReflectionUtils。我们通过计算getDeclaredField()⽅法和ReflectionUtils.findField()⽅法在1秒内获取类中元素的次数来判断两者的性能。
public static void main(String[] args) {
try {室内高尔夫
int times = 0;
long startMili = System.currentTimeMillis();
雅思分数计算while (true) {
long nowMili = System.currentTimeMillis();
DeclaredField("balance");
times++;
if (nowMili > startMili + 1000) {
break;
}
}
System.out.println("getDeclaredField⽅法执⾏了" + times + "次");
times = 0;
一月到十二月
startMili = System.currentTimeMillis();
while (true) {
龙年成语long nowMili = System.currentTimeMillis();
ReflectionUtils.findField(InteBidResultDTO.class, "balance");
times++;
if (nowMili > startMili + 1000) {
break;
}
}
凌云之志System.out.println("findField⽅法执⾏了" + times + "次");
} catch (SecurityException | NoSuchFieldException e) {
e.printStackTrace();
}
}
运⾏结果是:
getDeclaredField⽅法执⾏了3200996次
findField⽅法执⾏了2434921次
由于ReflectionUtils.findField()⽅法会去查找⽗类中的元素,性能必然会差⼀些。如果⼀个类的⽗类祖先越多,遍历次数也就越多,上述运⾏结果的差距也就更加明显。

本文发布于:2023-07-15 13:11:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1082434.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变量   元素   获取   访问   次数   修饰   性能
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图