想要在第二节课中阅读用户输入和通话方法

时间:2014-01-13 12:41:12

标签: java

再次问好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。

2 个答案:

答案 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;
}

如果你不想成为英雄,请使用这样的方法名称,你会很好。