我正在制作一个游戏引擎,而我目前正在开发该程序的组件部分。我希望用户能够为组件提供特殊的渲染方法,因此我使用反射和其他一些东西。正如标题所示,这会引发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());
}
}
答案 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);
}
}