调用方法时出现Java ClassCastException

时间:2015-05-08 11:19:11

标签: java exception reflection

我正在制作一个游戏引擎,而我目前正在开发该程序的组件部分。我希望用户能够为组件提供特殊的渲染方法,因此我使用反射和其他一些东西。正如标题所示,这会引发ClassCastException,我无法弄清楚原因。这是代码:

public class LComponent {
    public Vector pos, size;
    private Class renderClass = getClass();
    private Method renderMethod;

    public LComponent(Vector pos, Vector size) {
        try {
            renderMethod = renderClass.getDeclaredMethod("defaultRender",
                    Graphics.class);
            renderMethod.setAccessible(true);
        } catch (NoSuchMethodException | SecurityException e) {
            e.printStackTrace();
        }
    }

    public void render(Graphics g) {
        try {
            renderMethod.invoke(renderClass, g);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void defaultRender(Graphics g) {
        g.drawRect((int) pos.getX(), (int) pos.getY(), (int) size.getX(),
                (int) size.getY());
    }
}

1 个答案:

答案 0 :(得分:1)

而不是

renderMethod.invoke(renderClass);

你需要

renderMethod.invoke(this, g);

虽然你可以在没有反思的情况下写下所有这些,但更简单。

  

我希望这个类可以自定义

我建议你使用界面

interface Renderable {
    void render(Graphics g);
}

public class LComponent implements Renderable {
    // can be anything which implements Renderable
    final Renderable renderable; // initialise in the constructor

    public void render(Graphics g) {
         renderable.redner(g);
    }

}