【发布时间】:2016-10-26 09:15:09
【问题描述】:
我正在探索 java 8 中引入的静态和默认方法的可能性。
我有一个接口,它有 2 个构建命令的默认方法,我通过 ssh 在服务器上运行以远程执行一些简单的任务。移动鼠标需要 2 个参数:鼠标的 x 和 y 位置。
public interface Robot {
default String moveMouse(int x, int y) {
return constructCmd("java -jar move_mouse.jar " + x + " " + y);
}
default String clickLeft() {
return constructCmd("java -jar click_left.jar");
}
static String constructCmd(String cmd) {
return "export DISPLAY=:1.0\n" +
"cd Desktop\n" +
cmd;
}
}
我有多个带有预设值的枚举,我可以有效地将所有枚举组合成一个而不使用任何接口,但是该枚举将包含数百或数千个值,我想保持它有条理,所以我已经将 evertying 拆分为多个枚举。
我希望所有枚举共享相同的方法,所以我想我会在接口中提供默认方法。
public enum Field implements Robot {
AGE_FIELD(778, 232),
NAME_FIELD(662, 280);
public int x;
public int y;
Field(int x, int y) {
this.x = x;
this.y = y;
}
}
所以我可以通过以下方式获取字符串命令:
Field.AGE_FIELD.clickLeft();
Field.AGE_FIELD.moveMouse(Field.AGE_FIELD.x, Field.AGE_FIELD.y);
但是 moveMouse 对我来说看起来真的很糟糕,我认为默认情况下应该可以使用枚举的值。
谁有解决这个问题的好办法?
【问题讨论】:
-
这似乎是一个概念问题。你想要的是一个带有
void moveMouse()、int getMouseTargetX()和int getMouseTargetY()方法的接口。您当前的设计需要特定的 x 和 y 坐标。我的建议假设对象具有一些属性,定义 x 和 y 坐标。我的建议更像是对现有系统的扩展,而不是替代。您的接口将用于组件实际移动鼠标,而我的接口将由组件使用,组件调用实际移动鼠标的组件。
标签: java enums interface java-8