gpt4 book ai didi

java - 允许最终程序员扩展 API 枚举

转载 作者:行者123 更新时间:2023-11-30 03:57:29 25 4
gpt4 key购买 nike

我正在编写一个游戏 API,我希望有一个控件枚举。我想定义基本控件(JUMP、MOVE_LEFT),但最终开发人员应该能够添加其他控件(DANCE、SHOOT)。

那么我如何允许最终程序员添加到我的列表中,而不必触及我的原始枚举文件?

最佳答案

正如链接的答案指出的那样,您不能直接扩展枚举。

您的问题没有提供太多可供使用的信息,但这是我解决问题的方法。希望这会有所帮助。

首先,我将定义一个抽象来封装为每个“控件”执行的实际逻辑。

interface Behaviour {
void invoke();
}

实现此接口(interface)的对象将重写 invoke() 方法以提供实际的控制逻辑,例如向左或向右移动游戏对象。

您的 API可以具有如下所示的方法,该方法执行适合调用该方法的控件的任何操作。

public void moveObjectAccordingTo(Behaviour behaviour) {
behaviour.invoke();
// Whatever else you want to do...
}

包含默认控件的枚举可以实现此接口(interface),如下所示:

public enum Controls implements Behaviour {
JUMP("Player jumped..."),
MOVE_LEFT("Player moved left..."),
MOVE_RIGHT("Player moved right...");

private final String message;

Controls(String message) {
this.message = message;
}

@Override
public void invoke() {
System.out.println(message);
}
}

这允许您使用以前的方法,如下所示:

public void moveObjectAccordingTo(Controls.JUMP);

现在,您希望开发人员能够在不影响枚举的情况下向系统添加自己的附加控件。您所要做的就是实现Behaviour 接口(interface)并重写invoke 方法。像这样:

public class DanceControl implements Behaviour {

@Override
public void invoke() {
System.out.println("Player is dancing...");
}
}

然后就可以使用新行为,而无需更改原始枚举或更改 API。

public void moveObjectAccordingTo(new DanceControl());

关于java - 允许最终程序员扩展 API 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22818716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com