Java 如何获取当前类';s字段基于使用反射的对象类型?

Java 如何获取当前类';s字段基于使用反射的对象类型?,java,reflection,Java,Reflection,我有一个类,它有许多Label、String和int字段。在一个方法中,我只想循环遍历所有标签。 课程样本如下: public class Human{ Label lbl1; Label lbl2; Label lbl3; String str1; int i1; public void loadLbl(){ //load all Label only } } 下面是我现在正在处理的代码,但无法获得获取字段的正确语

我有一个类,它有许多Label、String和int字段。在一个方法中,我只想循环遍历所有标签。 课程样本如下:

public class Human{

    Label lbl1;
    Label lbl2;
    Label lbl3;
    String str1;
    int i1;

    public void loadLbl(){
         //load all Label only
    }
}
下面是我现在正在处理的代码,但无法获得获取字段的正确语法此代码将在loadLbl()内部运行。

Field[] fields=Human.class.getDeclaredFields(); // get all declared fields

for(Field field:fields){
     if(field.getType().equals(Label.class)){ // if it is a String field
      field.setAccessible(true);
      //work here             
     }
}

您可以从Human.class更改为引用对象,如new Human(),它应该可以工作

如下图所示:

Field[] fields=new Human().getClass().getDeclaredFields();
编辑:

或者不要在代码中使用其他方法getClass()

如下图所示:

 Field[] fields=Human.class.getDeclaredFields();

我认为Raju Sharma的回答是正确的,或者你的问题不够清楚。整个功能将是这样的

public void loadLbl()
    {
        // load all Label only
        Field[] fields = new Human().getClass().getDeclaredFields();
        for (Field field : fields)
        {
            if (field.getType().equals(Label.class))
            {
                System.out.println(field.getName());
            }
        }
    }

在这里,反思真的不是一个好主意(几乎总是这样)。只需将标签存储在列表中,并在列表上迭代即可。@JBNizet我正在编写一些简单的代码来加速开发过程。我知道风险,这是基于对象类型获取字段的正确语法。什么不起作用?@amicoderozer你说得对,我已经导入了libgdx反射包。这把事情搞砸了。切换回import java.lang.reflect.Field;请修复编译器错误。代码将在Human类内部执行,更新后的问题。如果字段是私有的-使用getters如果Human()没有公共构造函数怎么办?还是有外在的影响?实例不需要进行反射分析(通过invoke-yes调用),但需要在人类类中装入lbl()(按照问题)。如果您可以初始化Human,则可以使用此函数。如果loadLbl()在外部,则我的答案不正确。
public void loadLbl()
    {
        // load all Label only
        Field[] fields = new Human().getClass().getDeclaredFields();
        for (Field field : fields)
        {
            if (field.getType().equals(Label.class))
            {
                System.out.println(field.getName());
            }
        }
    }