有没有办法在不运行其余代码的情况下获取方法的返回值?

时间:2016-01-18 23:19:23

标签: java validation methods return

好奇是否有办法跳过方法的代码而只获取返回值。现在,此示例代码将运行两次调用y.output,而我只需要将choices()值作为参数发送到return方法。

我知道我不必用Input.validate(...)方法严格保留所有有效选择,但将它们组合在一起似乎更加清晰。

choices()
public class Display
{
     public static String[] choices()
     {
          System.out.println("Choices:");
          System.out.println("A. foo");
          System.out.println("B. bar");

          String[] validChoices = {"A", "B"};
          return validChoices;
     }
}

主要是效率问题,而不是为我想要显示的每个唯一选择组创建一个新的import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String input; Display.choices(); //Called to output valid choices input = in.nextLine(); Input.validate(input, Display.choices()); //Sends "input" to be compared with all the values in "validChoices" array //returned by "choices()" method but also duplicates output } } 方法,然后验证输入。

同样好奇的是,在保持代码更简洁高效方面,可能还有其他类型的解决方法。

2 个答案:

答案 0 :(得分:1)

如果没有方法的帮助,您不能跳过方法的打印和其他副作用。例如,您可以传递一些内容以指示不应执行任何输出:

 public static String[] choices(boolean performOutput) {
     if (performOutput) {
         System.out.println("Choices:");
         System.out.println("A. foo");
         System.out.println("B. bar");
      }
      String[] validChoices = {"A", "B"};
      return validChoices;
 }

现在,您可以调用Display.choices(true)来生成输出,Display.choices(false)不生成输出。

但是,在您的情况下没有必要:当每次运行时方法返回相同的内容时,您可以调用它,存储其输出,并使用该点上的存储输出:

String choices = Display.choices(); //Called to output valid choices
input = in.nextLine();
Input.validate(input, choices); 

答案 1 :(得分:1)

如果我理解正确,你想要一种方法做两件事:

  1. 返回一个数组并执行System.out.println()来电
  2. 仅返回数组并跳过System.out.println()来电
  3. 实现此目的的一种方法是为方法提供boolean参数作为标志:

    public static String[] choices(boolean returnArrayOnly) {
        if (!returnArrayOnly) {
            System.out.println("Choices:");
            System.out.println("A. foo");
            System.out.println("B. bar");
        }
        return new [] {"A", "B"};//cut down from String[] validChoices = {"A", "B"};
     }