[英]Interface to have dynamic method names
假设一个接口是这样暴露的:
public interface IAction {
void run();
void walk();
void stop();
void jump();
}
现在像这样可以有任意数量的动作。 每个动作都与一个枚举类型相关联,如下所示:
public enum Action {
RUN("run"),
WALK("walk"),
STOP("stop"),
JUMP("jump")
}
现在每次我想添加更多动作时,我都需要在IAction接口中添加一个枚举和关联的方法。
相反,接口方法可以从枚举中公开吗? IAction 接口的任何实现都应该始终依赖于枚举Action 。 Action中的所有枚举类型都应该公开。 这可能吗?
在您只想拥有一个实现的假设下,您可以省略接口并拥有一个Runnable
in Action
,如下所示:
public enum Action {
RUN("run", () -> System.out.println("run")),
WALK("walk", () -> System.out.println("walk")),
STOP("stop", () -> System.out.println("stop")),
JUMP("jump", Action::jump);
private final String value;
private final Runnable action;
Action(final String value, final Runnable action) {
this.value = value;
this.action = action;
}
public void execute() {
action.run();
}
private static void jump() {
// TODO: Implement me
}
您可以对Runnable
使用 lambda 或方法引用。 调用者通过例如Action.RUN.execute()
执行一个动作。
这样,您只需在添加操作时更新此 class。
此示例类似于 Joshua Bloch 的有效 Java,第三版中的第 42 项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.