我有一个Java类,其中包含一个名为fillColor的Color对象,以及其他几种颜色;
反思对此可能有点过头了,事实上我可能最终会使用地图,但无论哪种方式都值得一提。
这是该类的一种方法,它根据字符串返回颜色。
public Color getColor(String name) {
Field field;
Color c= new Color();
try{
field = getClass().getDeclaredField(name);
System.out.println(field.get(c));
}catch(Exception e){
System.out.println(e.getMessage());
throw new RuntimeException("wtf happened here?");
}
return c;
}
这会引发异常。它的消息是
Can not set com.badlogic.gdx.graphics.Color field com.whatever.project.Hexagon.fillColor to com.badlogic.gdx.graphics.Color
显然我很困惑。这条消息告诉我,我不能将Color字段分配给Color变量吗?
编辑:堆栈跟踪
java.lang.IllegalArgumentException: Can not set com.badlogic.gdx.graphics.Color field com.whatever.project.Hexagon.fillColor to com.badlogic.gdx.graphics.Color
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.lang.reflect.Field.get(Field.java:379)
at com.whatever.project.Hexagon.getColor(Hexagon.java:177)
at com.whatever.project.Animator$1.animate(Animator.java:45)
at com.whatever.project.Animator.animate(Animator.java:86)
at com.whatever.project.Project.render(BlackDot.java:40)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:206)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
fillColor声明如下:
Color fillColor;
答案 0 :(得分:3)
你得到一个字段
field = getClass().getDeclaredField(name);
无论this
类型是什么,大概是com.whatever.project.Hexagon
。但是,您尝试在com.badlogic.gdx.graphics.Color
类型的对象上检索字段。
System.out.println(field.get(c));
这是错误的。 javadoc州
返回此
Field
所代表的字段的值 指定的对象。
Color
没有Color
字段。
你想要的可能是
field.get(this)