java查找没有NoClassDefFoundError的所有私有字段
我想通过枚举一组给定类的私有字段来动态创建一个类组合映射。这在getDeclaredFields()和一组孤立的类的情况下非常有效
但是,如果该类包含一个类型为不可用类的字段,则调用将以NoClassDefFoundError
失败。是否有任何方法可以枚举私有字段,以避免这种行为,例如逐个捕获异常并继续处理其余字段
你可以在下面搜索框中键入要查询的问题!
我想通过枚举一组给定类的私有字段来动态创建一个类组合映射。这在getDeclaredFields()和一组孤立的类的情况下非常有效
但是,如果该类包含一个类型为不可用类的字段,则调用将以NoClassDefFoundError
失败。是否有任何方法可以枚举私有字段,以避免这种行为,例如逐个捕获异常并继续处理其余字段
# 1 楼答案
因此,我最终找到了解决方案:
我可以使用ASM库的
ClassReader
访问每个字段并获取其名称不幸的是,即使知道名称也不足以让反射变得有用,因为出于某种原因
Class.getDeclaredField(name_taken_from_classreader)
仍然会调用getDeclaredFields()
指向我的讨论可以在here找到
# 2 楼答案
不是通过反射,不是。动态获取给定类型的所有字段(即不知道其名称)的唯一方法是使用
getDeclaredFields()
。这是一个批处理查询,它为每个字段构造一个Field
实例。如果其中一个失败,则整个调用将失败# 3 楼答案
我没有得到你的答案。您可以将字段逐个枚举到try-catch(NoClassDeFoundError)块中,如果出现异常,请在catch块中对该字段执行任何操作,然后转到另一个字段。是你在找的东西,还是我误解了你的问题
# 4 楼答案
是否有任何方法可以枚举私有字段,以避免这种行为,例如逐个捕获异常并继续处理其余字段强>
我认为这不是正确的方法。你不应该捕捉错误
NoClassDefFoundError
是一个错误