我有一个在运行时遍历实例的成员的类。
下面是一个包含不同类型字段的类。 AssetTexture是我想要循环的类型之一。
public class A {
public static AssetTexture T_BG = new AssetTexture("bg.png");
public static AssetTexture T_REELS = new AssetTexture("reels.png");
public static AssetTexture T_LOGO = new AssetTexture("logo.png");
public static String things_that_should_not_inside_the_loop;
}
以下是AssetTexture类的示例代码。它只包含一个名称。
class AssetTexture {
private String name;
public AssetTexture(String name){
this.name=name;
}
}
下面是我在运行时循环遍历所有字段的方法。它很成功。但我已经尝试了所有可用的方法。它没有获得会员的方法。
public class Manager {
public Manager(){
A a=new A();//init A
//loop through all field of instance a
Field[] fields=this.a.getClass().getDeclaredFields();
for(Field field:fields){
if(field.getType().equals(AssetTexture.class)){
Gdx.app.debug("Debug", field.getName());
}
}
}
当前输出:
T_BG
T_LOGO
T_REELS
预期结果:
bg.png
reels.png
logo.png
我试图在AssetTexture中使用toString方法并覆盖toString。像下面的代码一样
field.getName() ---> field.toString()
覆盖了AssetTexture中的toString
class AssetTexture {
@Override
public String toString() {return name;}
}
但它没有运行覆盖方法。
答案 0 :(得分:2)
请致电field.getName()
,而不是致电field.get(null).toString()
。 Field.get
返回特定实例的字段值,对于静态字段,实例不是必需的,因此您可以传递null。