我有一个包含各种类型参数的类.我想迭代所有类型的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))
应该管用.
编辑:史蒂夫里德指出,你不一定非常需要它XPathDataElement
; 子类也可以正常工作.要检查该字段是否可以被视为a XPathDataElement
,您应该使用Class.isAssignableFrom(Class)
.
if (XPathDataElement.class.isAssignableFrom(field.getType()))
将是代码.
我想你真正的问题是如何反思地得到一个领域的价值?如果是这样,那Field.get(Object)
就是你想要的.传递给的对象get()
是您要检索其字段的对象; 如果你正在操作this
(这是一个强烈的代码味道),那么你的代码就是
XPathDataElement tmp = (XPathDataElement) field.get(this);