我是 Java 新手,还没有学会如何创建 2 个单独的类并将它们组合在一起,因此,我最终将所有内容都混杂在一起,您可以想象代码最终看起来如何无法理解,我计划稍后在我的课程中学习。然而,我需要一个解决方案来使用"方法",这样我的代码才能看起来更干净,如果我需要添加或修复它,它不会有太大的麻烦。
所以基本上我的问题是我是否可以从main中使用Hashmap.get从方法中创建的哈希图中获取信息:
static String createAccount(String username, String authpassword) {
Map<String, String> newacc = new HashMap<String, String>();
}
以上是方法"将"的样子,在主方法下方:
public static void main(String args[]) {
newacc.get(username);
}
这是可能的吗,似乎我遇到了这个错误(我认为主要方法没有读取方法中创建的hasmap。
error: cannot find symbol
newacc.get(username);
提前谢谢你!
createAccount()
中创建的映射将分配给局部变量newacc
。这意味着在方法完成后,您将丢失对它的引用。
如果要保留可以添加新帐户的地图,可以将其作为类的字段:
class AccountManager {
private static Map<String, String> accounts = new HashMap<>();
static void createAccount(String username, String authpassword) {
accounts.put(username, authpassword);
}
static String getAuthPassword(String username) {
return accounts.get(username);
}
public static void main(String[] args) {
// get the input from somewhere
AccountManager.createAccount(username, authpassword);
AccountManager.getAuthPassword(username);
}
}
您的映射newacc
只能在createAccount
方法中访问,而不能访问外部世界,因为它的范围仅在方法createAccount
内,因此编译错误。
若要解决此问题,请将newacc
定义为静态和类级别。因此,只需在方法外部定义 Map,例如:
static Map<String, String> newacc = new HashMap<String, String>();
static String createAccount(String username, String authpassword) {
//access newacc here
}
同样,您可以直接在main方法中访问相同的内容。
使用当前代码无法从 main
方法访问 newacc
变量,因为newacc
的作用域为 createAccount
方法。您有两种选择,将newacc
定义为类中的静态字段并从两种方法访问同一实例(请参阅@SMA的答案),或者从 createAccount
方法返回您的帐户并在 main
中捕获它。这样:
Map<String, String> createAccount(String username, String password) {
Map<String, String> newacc = new HashMap<String, String>();
// do stuff with account
return newacc;
}
public static void main(String[] args) {
Map<String, String> newacc = createAccount("user", "pass");
newacc.get("username");
}