从Method获取Hashmap

时间:2015-04-15 14:49:15

标签: java methods hashmap main

我是Java的新手,还没有学会如何创建两个单独的类并将它们组合在一起,所以,我最终在主要内容中混淆了一切,你可以想象代码最终看起来是不可理解的,我计划稍后在我的课程中学习。然而,我需要一个解决方案来使用'方法',所以我的代码看起来更干净,如果我需要添加或修复它不会有太多的麻烦。

所以基本上我的问题是我是否可以使用main中的Hashmap.get从方法中创建的hashmap获取信息:

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);

提前谢谢!

3 个答案:

答案 0 :(得分:1)

您的地图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方法中访问相同的内容。

答案 1 :(得分:1)

您在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);
    }
}

答案 2 :(得分:1)

您无法使用当前代码访问newacc方法中的main变量,因为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");
}