从方法中获取 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");
}