我有一个包含各种类型的大量参数的类。我想遍历所有类型 A 成员,并运行特定函数 ( A.doSomething() )
这甚至无法编译:从字段到 XPathDataElement 的转换是非法的
Field[] fields = this.getClass().getDeclaredFields();
for (Field field : fields) {
if (field. getType().getName().equals(XPathDataElement.class.getName()))
{
tmp = (XPathDataElement)field; // Doesn't compile
sb.append(field.getName() + ":");
tmp.update();
}
}
谢谢!
最佳答案
如果您不说明代码有什么问题,就很难调试您的代码。
我能看到两件事:
不需要比较字符串来决定字段的类型是否是正确的类。
if (field.getType().equals(XPathDataElement.class))
应该可以。
编辑: Steve Reed points out您不一定需要它完全是
XPathDataElement
;子类也可以。要检查该字段是否可以被视为XPathDataElement
,您应该使用Class.isAssignableFrom(Class)
.if (XPathDataElement.class.isAssignableFrom(field.getType()))
将是代码。
我想您真正的问题是如何反射性地获取字段的值?如果是这样,那么
Field.get(Object)
是你想要的。您传递给get()
的对象是您要检索其字段的对象;如果您在this
上操作(这是一种强烈的代码味道),那么您的代码将是XPathDataElement tmp = (XPathDataElement) field.get(this);
关于java - 使用反射遍历类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721594/