当前位置:  开发笔记 > 编程语言 > 正文

使用反射来迭代类成员

如何解决《使用反射来迭代类成员》经验,为你挑选了1个好方法。

我有一个包含各种类型参数的类.我想迭代所有类型的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> Michael Myer..:

当你没有说出它的错误时,很难调试你的代码.

我能看到的两件事:

    没有必要比较字符串来确定字段的类型是否是正确的类.

    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);
    

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有