再次问好StackOverflow,
短版: 如果我有一个名为secondCommand的字符串,并且该字符串是我想在另一个类中调用的方法,我该如何使用以下格式的字符串: “Circle.secondCommand” 实际上调用该方法?
长版: 我正在编写一个关于形状操作的程序 - 我现在只使用Circle,但是一旦我使Circle正常工作,我将扩展为使用另外3个形状。我的程序目前的工作原理如下:
InputReader扫描用户输入,分别返回每个单词输入。这是在我的ShapeProgrammer类中使用名为“Execute”的方法处理的。目前的方法是这样的:
private void execute(String[] commands)
{
String firstCommand = commands[0];
String secondCommand = commands[1];
String thirdCommand = commands[2];
{
Circle c = shapes.get(firstCommand);
if(firstCommand.equals("circle")) {
makeACircle(commands);
}
else if(c != null){
int newInt = Integer.parseInt(thirdCommand);
if (newInt != null)
Circle.secondCommand(newInt);
c = null;
}
else if(firstCommand.equals("help")) {
printHelp();
}
else {
System.out.println("Unknown command: " + firstCommand);
}
}
}
String []命令在早期方法的while语句中定义,如下所示:
String[] commands = reader.getInput();
我在每个形状的单独类中拥有形状本身的所有方法 - 我已经将Execute方法写入了我想要做的事情,但NetBeans给了我各种错误。
用户将被要求(和)告诉他们以特定格式输入他们的命令:
创建形状时,它将是形状名称
在字符串为名称
的时刻,每个形状都存储在HashMap中当想要编辑/使用形状时,它将是名称命令变量 - 我想我已经从HashMap中调用了形状,现在我只是想知道我是怎么想的可以使我的字符串secondCommand可用,以便从另一个类调用该方法。
作为旁注,我有 int newInt = Integer.parseInt(thirdCommand) 因为我的一些方法是用于changeSize或者需要int输入。我可以摆脱它并将其放入Circle类中,如果这样更容易,那么我只需要将thirdCommand字符串调用到其他方法并转换为int。
答案 0 :(得分:0)
我认为reflections API可能会对您有所帮助。这是一种通过名称调用方法的简单方法。这tutorial可以帮助您。基本上是:
String methodName = ***;
Class classToBeInvoked = **.class;
Method javaMethod = classToBeInvoked.getMethod(methodName, <arguments-type>);
Object returnType = javaMethod.invoke(classToBeInvoked, <arguments>);
答案 1 :(得分:0)
另一种(不像反射那么优雅)解决它的方法,
为什么不在String数组中定义所有这些方法并在switch-case块中使用它?
////////// In your end method ////////
switch (secondCommand) {
case "DIAGON":
Circle.diagon();
break;
case "THING":
Circle.thing();
break;
case "ANOTHERFORMULA":
Circle.anotherFormula();
break;
default:
System.out.println("Daamn good.");
break;
}
如果你不想成为英雄,请使用这样的方法名称,你会很好。