2

我有一个包含 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
       }
    }

}

有没有理由扭转循环?

4

1 回答 1

2

你真的测量过这个的性能吗?我怀疑与网络服务的网络和编组开销相比,这种影响可以忽略不计。

如果您真的认为这是一个问题,您是否可以Method提前检索对象的对象(或者至少以惰性方式执行此操作 - 在需要时缓存以供以后使用。我注意到上面 Sotirios 的评论,缓存可能是如果是这样,则多余)

于 2013-10-07T14:36:24.743 回答