【发布时间】:2022-01-11 22:26:45
【问题描述】:
我正在寻求有关 Java (1.8) 问题的帮助。 我有一个类(我会在下面说),它有多个具有相同名称的方法,使用不同类型的参数,但都继承了同一个接口。 我想使用接口和 java 中的变量调用此方法,以使用调整后的方法,主要是为了避免使用多个 instanceof ... 或访问者模式,我认为这会大大提高我会避免的代码复杂性。
这是课程:
public class BoxAdapterToRenderer {
public static Node createRenderer(Fighter fighter){
Rectangle fighterRenderer = new Rectangle();
fighterRenderer.setHeight(50);
fighterRenderer.setWidth(50);
Image im = new Image(Constants.ruleReader.getFighterImageURL(fighter.getName()),false);
fighterRenderer.setFill(new ImagePattern(im));
return fighterRenderer;
}
public static Node createRenderer(Bomb bomb){
Rectangle bombRenderer = new Rectangle();
bombRenderer.setHeight(50);
bombRenderer.setWidth(50);
Image im = new Image(Constants.ruleReader.getBombImageURL(),false);
bombRenderer.setFill(new ImagePattern(im));
return bombRenderer;
}
public static Node createRenderer(Mine mine){
Rectangle mineRenderer = new Rectangle();
mineRenderer.setHeight(50);
mineRenderer.setWidth(50);
Image im = new Image(Constants.ruleReader.getMineImageURL(),false);
mineRenderer.setFill(new ImagePattern(im));
return mineRenderer;
}
public static Node createRenderer(StaminaPad staminaPad){
Rectangle staminaPadRenderer = new Rectangle();
staminaPadRenderer.setHeight(50);
staminaPadRenderer.setWidth(50);
Image im = new Image(Constants.ruleReader.getStaminaPadImageURL(),false);
staminaPadRenderer.setFill(new ImagePattern(im));
return staminaPadRenderer;
}
这里是一个调用的例子:
Box box = board.getGrid()[i][j];
BoxAdapterToRenderer.createRenderer(box)
所以这里我的界面是 Box,我的不同继承类是 Fighter、bomb、mine 等... 这里java不想编译,因为它没有检测到带有Box类型参数的createRenderer
我还想补充一点,Box 及其不同的继承者是全局 MVC 模式模型的一部分,此处的 createRenderer 方法在视图中调用,并且视图根本不应该考虑模型, 通常在 Box 中定义 createRenderer 方法不是解决方案。
【问题讨论】:
-
对我来说,Box 接口似乎应该有方法 createRenderer,而 Mine、StaminaPad、Bomb、Fighter 类将以不同的方式实现它们(而不是在 BoxAdapterToRenderer 类中)。
-
感谢和抱歉,我更新了我的问题,我忘了提及您的解决方案在此处无法工作的 MVC。
-
看看en.wikipedia.org/wiki/Multiple_dispatch。在 Java 中可能是不可能的。
标签: java instanceof