代码之家  ›  专栏  ›  技术社区  ›  Vivin Paliath

bean中私有字段的getDeclaredField(String)与getMethod(String)

  •  5
  • Vivin Paliath  · 技术社区  · 14 年前

    我有一个bean,我想通过反射访问它的属性。我收到字符串形式的属性名。这些豆子有自己私有领域的getter方法。

    我目前正在使用 getDeclaredField(fieldName) ,使用 setAccessible(true) 然后使用 get .

    另一种方法是将字段名大写并添加 得到 在它的前面,然后从类中获取该名称的方法,最后调用该方法以获取私有字段的值。

    哪条路更好?

    编辑

    也许我应该解释一下我所说的“更好”是什么意思…“更好”是指在最佳实践的意义上。或者,如果有任何微妙的警告或差异。

    4 回复  |  直到 14 年前
        1
  •  1
  •   Peter Tillemans    14 年前

    这取决于您的使用,但一般来说,我更喜欢使用getter,因为这是“正常”的方式,而且在更多情况下,我会做类开发人员希望做的事情。

    原则上,如果类的开发人员已经将字段私有化,他可以自由地做他想做的事情,例如,如果可以用另一种方式计算,则稍后删除它。如果3个月后没有人再记得你不走运的话,很有希望马上就可以破门而入了。

    请注意,有一个类似ApacheCommonsBeanutils的库(我相信在Spring中也有一个库),它为您提供了一个更健全的接口,比如散列图。

        2
  •  2
  •   Jon Freedman    14 年前

    你可能想看看 Introspector 类,它是一个很好的包装器。如果只处理已公开的属性,则可以 BeanInfo 对象,然后调用 getPropertyDescriptors() 例如:

    final BeanInfo info = Introspector.getBeanInfo(clazz);
    for (PropertyDescriptor prop : info.getPropertyDescriptors()) {
        final Method read = prop.getReadMethod();
        if (read != null) {
            // do something
        }
    }
    
        3
  •  1
  •   Richard Fearn    14 年前

    可能使用getter方法,因为除了返回属性的值之外,它可能还有其他行为。但这取决于班级。

        4
  •  0
  •   bwawok    14 年前

    哪方面更好?

    你可以写一个20行的单元测试来看看哪个更快。你可以同时写和看,看看哪个更容易阅读。如果有一种方法既容易阅读又快,那就试试看。如果不是的话,你就得选毒…

    推荐文章