繁体   English   中英

使用Java中的反射按名称获取变量

[英]Getting a variable by name using reflection in Java

我有一个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;

你得到一个领域

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM