我不确定如何绕过它。
需要详细帮助
答案 0 :(得分:2)
首先创建一个Map<String, Shape>
,其中包含所有可能的命令作为键,相应的形状为值:
Map<String, Shape> shapesByCommand = new HashMap<String, Shape>();
shapesByCommand.put("circle", new Circle());
shapesByCommand.put("sun", new Sun());
...
然后,当您收到命令时,您将获得相应的形状并使其可见:
Shape shape = shapesByCommand.get(commands[0]);
if (shape != null && "visible".equals(commands[1])) {
makeVisible(shape);
}
答案 1 :(得分:1)
我认为JB Nizet的回答可能会对你有所帮助,特别是对你问题的第一部分。但是,如果您正在解决问题的第二部分的一般解决方案,即如何根据要在HashMap
中查找的字符串调用函数,那么您可能要做的就是存储{在HashMap
中{3}},然后在查找后调用该函数对象(您可能还会发现function objects有用)。
这是一个例子(使用字符串而不是形状):
public interface Action {
abstract void run(String s);
}
public static void main(String[] args) {
HashMap<String, Action> actions = new HashMap<String, Action>();
actions.put("visible", new Action() {
public void run(String s) {
System.out.println("Running 'visible' on: " + s);
}
});
String input[];
input = new String[2];
input[0] = "sun";
input[1] = "visible";
actions.get(input[1]).run(input[0]);
}
输出:
Running 'visible' on: sun
答案 2 :(得分:0)
我不会在这里使用HashMap
,我会使用EnumMap
然后,在enum
的代码中,您可以将所有实现作为各种enum
子类的方法。
public enum Actions {
visible, move, resize;
public doAction(Shape s) {
switch(this) {
case visible:
// handle command
break;
case move:
// etc.
}
}
public enum ShapeEnum {
circle, sun, square;
}
然后,在您的代码中,您可以执行以下操作:
try {
Actions a = Actions.valueOf(command);
Shapes s = Shapes.valueOf(shape);
a.doCommand(myEnumMap.get(s));
} catch (IllegalArgumentException e) {
// not a command, handle it
}