我有以下代码:
private static void createMenu(String nameOfMenu, Callable<Void> case1, Callable<Void> case2, Callable<Void> case3 ) throws Exception{
System.out.println(nameOfMenu+" Options");
System.out.println("What would you like to do?(Type the appropriate slection number)");
System.out.println("(1) Add "+nameOfMenu);
System.out.println("(2) Edit "+nameOfMenu);
System.out.println("(3) Remove "+nameOfMenu);
System.out.println("(4) Return to Main Menu");
System.out.println("To quit the program, type 'Q'");
String input = scanner.nextLine().toLowerCase();
while (!"1".equals(input) && !"2".equals(input) && !"3".equals(input) && !"4".equals(input) && !"q".equals(input)) {
System.err.println("Please enter 1, 2, 3, 4 or 'q' only");
input = scanner.nextLine().toLowerCase();
}
switch (input) {
case "1":
case1.call();
break;
case "2":
case2.call();
break;
case "3":
case3.call();
break;
case "4":
mainMenu();
break;
case "q":
System.exit(0);
System.out.println("Thank you!");
break;
}
}
我有第二种尝试调用上述方法的方法
private static void callingMethod(){
createMenu("menu name",method(),method1(),method2());
}
所有方法都是静态void。 Netbeans给我一个错误,说这里不允许'void'类型。 我该如何解决这个错误?
答案 0 :(得分:2)
Callable不是一种方法。这是一个界面。所以尝试这样的事情:
class MyTask implements Callable<Void> {
@Override
public Void call() throws Exception {
// do something
return null;
}
}
...
private static void callingMethod() {
createMenu("menu name", new MyTask(), new MyTask(), new MyTask());
}
答案 1 :(得分:0)
如果可读性不是优先级,则可以使用匿名类:
createMenu("menu name",
new Callable<Void>() {
@Override
public Void call() throws Exception {
method();
return null;
}
},
new Callable<Void>() {
@Override
public Void call() throws Exception {
method1();
return null;
}
},
new Callable<Void>() {
@Override
public Void call() throws Exception {
method2();
return null;
}
});