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

更新时间:2023-08-08 17:25:05 阅读: 评论: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()))) {
quartersreturn field;
}
}
// 获取所有⽗类,接着遍历⽗类中的元素。
archType = Superclass();
}
return null;
}
笔者本希望通过getDeclaredField()⽅法直接反射获取class中的元素,不过为了获取其⽗类中的元素使⽤了⼯具类ReflectionUtils。我们通过计算getDeclaredField()⽅法和ReflectionUtils.findField()⽅法在1秒内获取类中元素的次数来判断两者的性能。
public static void main(String[] args) {
try {
人力资源师报名
int times = 0;
catia培训long startMili = System.currentTimeMillis();
while (true) {
long nowMili = System.currentTimeMillis();节拍英文
DeclaredField("balance");
times++;
if (nowMili > startMili + 1000) {the who
break;
}
}
System.out.println("getDeclaredField⽅法执⾏了" + times + "次");
times = 0;
startMili = System.currentTimeMillis();
while (true) {
long nowMili = System.currentTimeMillis();
ReflectionUtils.findField(InteBidResultDTO.class, "balance");
the gossip>wmotimes++;
if (nowMili > startMili + 1000) {
break;
}
}
System.out.println("findField⽅法执⾏了" + times + "次");
} catch (SecurityException | NoSuchFieldException e) {
e.printStackTrace();
}
gct
}
运⾏结果是:
getDeclaredField⽅法执⾏了3200996次
findField⽅法执⾏了2434921次
由于ReflectionUtils.findField()⽅法会去查找⽗类中的元素,性能必然会差⼀些。如果⼀个类的⽗类祖先越多,遍历次数也就越多,上述运⾏结果的差距也就更加明显。

本文发布于:2023-08-08 17:25:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1128096.html

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

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