从方法中获取 Hashmap
get Hashmap from Method
我是 Java 的新手,还没有学会如何创建 2 个单独的 类 并将它们组合起来,所以,我最终把主要内容弄混了,你可以想象如何代码最终看起来无法理解,我计划在以后的课程中学习。然而,我需要一个与 'Methods' 一起工作的解决方案,这样我的代码就可以看起来更干净,如果我需要添加或修复它也不会很麻烦。
所以基本上我的问题是我是否可以使用 main 中的 Hashmap.get 从方法中创建的哈希图中获取信息:
static String createAccount(String username, String authpassword) {
Map<String, String> newacc = new HashMap<String, String>();
}
上面是方法 'would' 的样子,下面是主要方法:
public static void main(String args[]) {
newacc.get(username);
}
这可能吗,我似乎遇到了这个错误(我认为主要方法没有读取方法中创建的 hasmap。
error: cannot find symbol
newacc.get(username);
提前致谢!
您的地图 newacc
只能在 createAccount
方法内访问,不能访问外部世界,因为它的范围就在方法 createAccount
内,因此会出现编译错误。
要解决此问题,请将 newacc
定义为静态并处于 class 级别。所以只需在方法之外定义 Map ,如:
static Map<String, String> newacc = new HashMap<String, String>();
static String createAccount(String username, String authpassword) {
//access newacc here
}
同样,您可以直接在 main 方法中访问相同的内容。
您在 createAccount()
中创建的地图已分配给局部变量 newacc
。这意味着您在方法完成后失去了对它的引用。
如果您想保留一张地图,您可以在其中添加新帐户,您可以将其设为您的 class:
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);
}
}
您将无法使用当前代码从 main
方法访问 newacc
变量,因为 newacc
的范围仅限于 createAccount
方法。您有两个选择,将 newacc
定义为 class 中的静态字段并从两种方法访问同一实例(请参阅@SMA 的回答),或者从 return 您的帐户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");
}
我是 Java 的新手,还没有学会如何创建 2 个单独的 类 并将它们组合起来,所以,我最终把主要内容弄混了,你可以想象如何代码最终看起来无法理解,我计划在以后的课程中学习。然而,我需要一个与 'Methods' 一起工作的解决方案,这样我的代码就可以看起来更干净,如果我需要添加或修复它也不会很麻烦。
所以基本上我的问题是我是否可以使用 main 中的 Hashmap.get 从方法中创建的哈希图中获取信息:
static String createAccount(String username, String authpassword) {
Map<String, String> newacc = new HashMap<String, String>();
}
上面是方法 'would' 的样子,下面是主要方法:
public static void main(String args[]) {
newacc.get(username);
}
这可能吗,我似乎遇到了这个错误(我认为主要方法没有读取方法中创建的 hasmap。
error: cannot find symbol
newacc.get(username);
提前致谢!
您的地图 newacc
只能在 createAccount
方法内访问,不能访问外部世界,因为它的范围就在方法 createAccount
内,因此会出现编译错误。
要解决此问题,请将 newacc
定义为静态并处于 class 级别。所以只需在方法之外定义 Map ,如:
static Map<String, String> newacc = new HashMap<String, String>();
static String createAccount(String username, String authpassword) {
//access newacc here
}
同样,您可以直接在 main 方法中访问相同的内容。
您在 createAccount()
中创建的地图已分配给局部变量 newacc
。这意味着您在方法完成后失去了对它的引用。
如果您想保留一张地图,您可以在其中添加新帐户,您可以将其设为您的 class:
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);
}
}
您将无法使用当前代码从 main
方法访问 newacc
变量,因为 newacc
的范围仅限于 createAccount
方法。您有两个选择,将 newacc
定义为 class 中的静态字段并从两种方法访问同一实例(请参阅@SMA 的回答),或者从 return 您的帐户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");
}