我有一个包含 1 到 100 个特定类型对象的集合。这些对象有 100 多个属性。我必须遍历集合中的所有对象并检查某些属性以对它们进行处理。实际的方法取决于一个属性文件,所以我无法事先知道我必须调用哪个。我以这种方式通过反射完成了它:
for (MyObject mo : myObjectList){
for (PropertyDescriptor propertyDescriptor : Introspector
.getBeanInfo(mo.getClass())
.getPropertyDescriptors()) {
method = propertyDescriptor.getWriteMethod();
if (method != null){
//Here I check if the attribute is in the properties file and do the job
}
}
}
这是在由多个应用程序调用的 Web 服务中实现的,理论上负载可能很高。
反射方法的计算机成本很高,但如果明天任务解决了新属性,它是我发现能够在不更改代码的情况下完成任务的唯一方法。
我已经读过(不记得来源)反射最昂贵的部分是寻找方法而不是调用它们,所以我一直在想也许可以反转循环(即寻找方法然后通过反射调用方法对于每个对象)是一个性能明智的变化。像这样的东西:
for (PropertyDescriptor propertyDescriptor : Introspector
.getBeanInfo(MyObject.getClass())
.getPropertyDescriptors()) {
if (method != null){
for (MyObject mo : myObjectList){
//Do the job here
}
}
}
有没有理由扭转循环?