2014-01-13 18 views
1

您好再次StackOverflow的调用方法,想读取用户输入并在第二类

短版本: 如果我有一个名为secondCommand字符串,这个字符串就是我要在另一个类中调用一个方法,我怎样才能使用该格式的字符串: “Circle.secondCommand” 实际调用该方法?

长版本: 我正在编写一个关于形状操作的程序 - 我目前只使用Circle,但是我将扩展到使用3个更多的形状,一旦我的Circle工作正常。我的程序目前的工作原理如下:

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); 
     } 
    } 
} 

字符串[]命令在一个while语句定义在较早的方法如下所示:

String[] commands = reader.getInput(); 

我有所有的形状本身在单独的方法中每种形状的类 - 我已经写入Execute方法,我正在尝试做什么,但是NetBeans给我所有的错误。

用户将被预期(和)告知输入它们的命令在一个特定的格式:

当创建的形状,这将是形状名称

每个形状是在存储在HashMap中当字符串是名字的时刻

当想要编辑/使用形状时,它将是名称命令变量 - 我想我已经尽可能从HashMap调用形状,现在我只是想知道我怎样才能让我的弦乐seco ndCommand可用,以便从另一个类中调用该方法。

作为一个旁注,我有 int newInt = Integer.parseInt(thirdCommand) 因为我的一些方法是用于changeSize或者需要int输入。我可以摆脱它,并将其放到Circle类中(如果这样会更容易),那么我只需将第三个命令字符串调用到其他方法中并在那里转换为int。

+1

这是很长的时间,它确切地提出一个特定的问题。 –

+0

已编辑,感谢您的建议! – user3074653

回答

0

我认为reflections API可能会帮助你。这是一种按名称调用方法的简单方法。这tutorial可以帮助你。基本上是:

 String methodName = ***; 
    Class classToBeInvoked = **.class; 

    Method javaMethod = classToBeInvoked.getMethod(methodName, <arguments-type>); 
    Object returnType = javaMethod.invoke(classToBeInvoked, <arguments>); 
0

另一个(不那么优雅一样的反射)的方式来解决它,

你为什么不定义所有的这些方法在一个字符串arrayand在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; 
} 

如果你不想成为英雄,那么使用这种方法名称,你会很好。