java - 使用反射遍历类成员

标签 java reflection

我有一个包含各种类型的大量参数的类。我想遍历所有类型 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();
        }
    }

谢谢!

最佳答案

如果您不说明代码有什么问题,就很难调试您的代码。

我能看到两件事:

  1. 不需要比较字符串来决定字段的类型是否是正确的类。

    if (field.getType().equals(XPathDataElement.class))
    

    应该可以。

    编辑: Steve Reed points out您不一定需要它完全是 XPathDataElement;子类也可以。要检查该字段是否可以被视为 XPathDataElement,您应该使用 Class.isAssignableFrom(Class) .

    if (XPathDataElement.class.isAssignableFrom(field.getType()))
    

    将是代码。

  2. 我想您真正的问题是如何反射性地获取字段的值?如果是这样,那么 Field.get(Object)是你想要的。您传递给 get() 的对象是您要检索其字段的对象;如果您在 this 上操作(这是一种强烈的代码味道),那么您的代码将是

    XPathDataElement tmp = (XPathDataElement) field.get(this);
    

关于java - 使用反射遍历类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721594/

相关文章:

java - 如何创建java pojo

android - 如何在 BaseFragment() 中使用 Reflection 实现数据绑定(bind)

c# - 使用反射获取方法描述

Java - 如何从代理类中获取注释?

Java:JFrame.setLocationRelativeTo(null) 在 Ubuntu 10.04/gnome 2.30.2 和 OpenJDK 1.6.0_18 上不使窗口居中

java - 如何更改 JFreeChart 上的轴值字体

c# - 如何拦截.Net 中第三方库对非虚拟方法的调用?

C# 从已编译的二进制文件中删除/修改个人文件路径

c# - 如何正确获取 Java 中的当前时间?

java - 在 JSON 对象中嵌入文件附件