我从一个文本文件中读取,像这样:比较字符串对象的toString()方法动态
while ((line = br.readLine()) != null) {
String[] a = line.split("\\: ");
key = a[0];
action = a[1];
gameKeys.add(key, action);
}
所在的文件会像
SPACE: FIRE_ACTION
E: USE_ACTION
这部分作品,key
和action
都是我想要的。
gameKeys
是Map
声明像这样:
private static Map<Keyboard.Key, Action> gameKeys = new HashMap<>();
Keyboard.Key
具有诸如SPACE
,A
,RETURN
等 动作是一个接口,保持其他行动;那些动作具有返回动作的toString()
方法,例如, new FireAction.toString()
返回FIRE_ACTION
。一个行动
例子:
public class FireAction implements Action {
@Override
public void execute() {
System.out.println("Fire key pressed!");
}
@Override
public String toString() {
return "FIRE_ACTION";
}
}
所以,我试图把文件的部件为对象,就像如果key
是"SPACE"
和action
为"FIRE_ACTION"
,然后,进行add
方法之后,gameKeys
将有<Keyboard.Key.SPACE, new FireAction()>
有反正我可以做到这一点?
然而,这听起来很棒(这是一个愚蠢的问题),我会在'Action'接口中声明地图,然后在实现Action的类中设置地图的值? – Tetramputechture 2014-10-28 18:03:09
@Tetramputechture我建议创建一个管理用户输入的地图(例如一个类ActionHandler)。然后只有这个类知道'Action'对象/键 - >动作绑定。 – ifloop 2014-10-28 18:06:35
@Tetramputechture我编辑了我的答案,希望清除它:) – ifloop 2014-10-28 18:23:39