通过HashMap访问函数有问题



我想在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将在其位置上工作。

相关内容

  • 没有找到相关文章

最新更新