gpt4 book ai didi

java - 是否可以通过反射获取字段,如果不存在则不抛出异常

转载 作者:行者123 更新时间:2023-12-02 03:49:12 24 4
gpt4 key购买 nike

如果下面的语句被调用数千次,如果有很多类没有名为“id”的字段,则速度会非常慢。有没有一种方法可以使用java中的反射按名称获取字段,如果该字段不存在,则不会抛出异常?

Field f2 = null;
try{
f2 = classThatMightNotHaveFieldId.getClass().getDeclaredField("id");
f2.setAccessible(true);
}catch(Exception e){
System.out.println(f1.get(classThatMightNotHaveFieldId));
}

最佳答案

要回答您是否可以在不引发异常的情况下查找字段的具体问题:是的,您可以调用 Class.getDeclaredFields()获取类的所有字段,然后迭代它们以找到具有适当名称的字段:

for (Field field : clazz.getDeclaredFields()) {
if (field.getName().equals("id")) {
// Do whatever.
break;
}
}

应该指出的是,虽然这不会引发异常,但它并不比调用 class.getDeclaredField("id") 更快(而且通常慢得多)(通过非常粗略的微基准测试)。并吞掉异常。 clazz.getDeclaredFields()在返回字段之前制作字段的防御性副本,因此调用此方法时需要完成大量额外工作。

您没有在问题中提供实际使用模式的详细信息;您也许应该进行一些实验,看看是否可以通过现有实现的替代方法(例如某种缓存)来实现加速。

关于java - 是否可以通过反射获取字段,如果不存在则不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com