通过 HashMap 访问函数时遇到问题
Having trouble accessing functions through a 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 的 class 来存储对象,我想通过向其添加一些函数来通过控制台访问它的函数,例如“add abc”使用构造函数存储一个对象Obj("abc"),但我无法将命令添加到哈希图中,因为我无法通过 main 访问它。
问题出在a.commands.put("add", Register::add);
main方法被标记为static
,表示它只能访问其他静态方法。
当您调用 Register::add
时,这试图说“传递 Register
class 的添加方法的方法引用”
但是,add
不是 class(静态)方法,它是 instance 方法,因此您必须指出 Register
的哪个实例想调用它。
您需要传递 Register
的特定实例。例如,a::add
将代替它工作。
我想将命令存储在 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 的 class 来存储对象,我想通过向其添加一些函数来通过控制台访问它的函数,例如“add abc”使用构造函数存储一个对象Obj("abc"),但我无法将命令添加到哈希图中,因为我无法通过 main 访问它。
问题出在a.commands.put("add", Register::add);
main方法被标记为static
,表示它只能访问其他静态方法。
当您调用 Register::add
时,这试图说“传递 Register
class 的添加方法的方法引用”
但是,add
不是 class(静态)方法,它是 instance 方法,因此您必须指出 Register
的哪个实例想调用它。
您需要传递 Register
的特定实例。例如,a::add
将代替它工作。