我想在HashMap中存储命令,但即使我已经创建了HashMap存储的对象的实例,我也无法从我的main中访问它。
interface Command{
void execute(String[] args);
}
public class Register {
private ArrayList<Obj> reg = new ArrayList<Obj>();
private HashMap<String, Command> commands = new HashMap<String, Command>();
protected void add(String[] cmd) {
if(cmd.length>=4) {
reg.add(new Obj(cmd[1]);
}
}
public static void main(String args[]){
Register a = new Register();
Scanner read = new Scanner(System.in);
a.commands.put("add", Register::add);
while(true) {
String line = read.nextLine();
String cmd[] = line.split(" ");
a.commands.get(cmd[0]).execute(cmd);
}
read.close();
}
}
我使用一个名为register的类来存储对象,我想通过控制台通过添加几个函数来访问它的函数,如"add abc"使用构造函数Obj("abc")存储一个对象,但是我不能将命令添加到hashmap中,因为我不能通过main访问它。
问题在a.commands.put("add", Register::add);
main方法被标记为static
,这意味着它只能访问其他静态方法。当你调用Register::add
时,这就是说,传递Register
类的add方法的方法引用;然而,add
不是一个类(静态)方法,它是一个实例方法,所以你必须指出你想在Register
的哪个实例上调用它。
您需要传递一个特定的Register
实例。例如,a::add
将在其位置上工作。