查找没有NoClassDefFoundError的所有私有字段

时间:2014-09-18 06:29:47

标签: java reflection

我想通过枚举给定类集的私有字段来动态创建类组合映射。这适用于getDeclaredFields()和一组独立的类。

但是如果类包含一个类型是不可用的类的字段,则调用将失败并显示NoClassDefFoundError。有没有办法枚举私有字段,以便我可以避免这种行为,例如逐个捕获异常并继续其余的字段?

4 个答案:

答案 0 :(得分:1)

不是通过反思,不是。获取给定类型的所有字段(即,不知道其名称)的唯一方法是使用getDeclaredFields()。这是一个批处理查询,它为每个字段构造一个Field实例。如果其中一个失败,则整个呼叫失败。

答案 1 :(得分:1)

所以我找到了解决方案:

我可以使用ASM库ClassReader访问每个字段并获取其名称。

不幸的是,即使知道名称还不足以使反思变得有用Class.getDeclaredField(name_taken_from_classreader)仍然会因某种原因调用getDeclaredFields()

可以找到指向我的讨论here

答案 2 :(得分:0)

我没有听你回答这个问题。您可以将这些字段逐个枚举到try catch(NoClassDeFoundError)块中,如果有异常,则不会对catch块中的该字段执行任何操作并转到其他字段。是你正在寻找的东西还是我误解了你的问题。

答案 3 :(得分:0)

有没有办法枚举私有字段,以便我可以避免这种行为,例如一个接一个地捕获异常并继续使用其他字段?

我不认为这是正确的方法。你不应该捕获错误。 NoClassDefFoundError是错误。

  

错误是Throwable的子类,表示严重问题   一个合理的应用程序不应该试图抓住。最多的   错误是异常情况。 ThreadDeath错误,虽然是   "正常" condition,也是Error的子类,因为大多数   应用程序不应该试图抓住它。