可以理解为什么它不允许我运行displaymainMethod
,因为它是私有的,即使我知道我可以从同一个类运行它。有没有办法做到这一点,而不使用反射API?
这是错误
Error:(10, 9) java: cannot find symbol
symbol: class displayMainMenu
location: class LoginPrototype
代码
import java.util.*;
public class LoginPrototype {
public static void main(String[] args) {
ArrayList<Credentials> allUsers = new ArrayList<Credentials>();
displayMainMenu mainMenu = new displayMenu();
}
private void displayMainMenu() {
int input;
do {
System.out.println("Menu Options");
System.out.println("[1] Login");
System.out.println("[2] Register");
System.out.println("[0] Quit");//5 Displaying Main Menu Options
Scanner sc = new Scanner(System.in);
input = sc.nextInt();
if (input > 2) {
System.out.println("Please enter a value of [0] - [2]");
}
else if (input == 1){
System.out.println("Login");
}
else if (input == 2){
System.out.println("Register");
}
else if (input == 0){
System.out.println("Thank you. bye.");
}
}while(input >= 2);
}
}
这里有几个问题。
第一个问题是你的通话范围。在main
方法中,您试图调用一个需要对象引用的方法。Main是静态的,displayMainMenu不是。因此,为了调用它,您需要实例化封装类的引用。
下一个问题是方法调用。displayMainMenu((是一个方法,而不是类型。所以new
关键字在这里不适用。
下一个问题是该方法的返回类型。displayMainMenu()
的返回类型为void。Void不能分配给变量。
尝试将其更改为:
import java.util.*;
public class LoginPrototype {
public static void main(String[] args) {
ArrayList<Credentials> allUsers = new ArrayList<Credentials>();
LoginPrototype lp = new LoginPrototype();
lp.displayMenu();
}
private void displayMainMenu() {
//Do stuff
}
}
这解决了代码的主要问题。
displayMainMenu mainMenu = new displayMenu();
这句话没有道理。您将函数视为对象。您应该只调用函数本身:displayMainMenu();
但要公开这个功能。