Java 如何获取当前类';s字段基于使用反射的对象类型?
我有一个类,它有许多Label、String和int字段。在一个方法中,我只想循环遍历所有标签。 课程样本如下: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 } } 下面是我现在正在处理的代码,但无法获得获取字段的正确语
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());
}
}
}