引用实例对象时,在构造函数中创建的填充 HashMap 返回 null

1 java constructor hashmap

第一次海报在这里。我搜索了stackoverflow,但找不到这个问题的任何答案,也许我的措辞不正确。

我有一个类,我在构造函数中创建了一个 HashMap(下面的代码):

导入 java.util.HashMap; 导入 java.util.ArrayList;

嬉皮类扩展客户{

Hippie() {
    name = "Hippie";

    HashMap<String, Double> preferences = new HashMap<String,Double>();
    preferences.put("Donuts", 1.5);
    preferences.put("Biscotti", 0.5);

}
Run Code Online (Sandbox Code Playgroud)

}

不幸的是,当我创建上面“嬉皮”对象的实例时,即使构造函数成功完成,对实例对象中 HashMap 的任何引用也会返回 null。

公共类 SEJavaDemo{ public static void main(String[] args){

Hippie Billy = new Hippie();
System.out.println(Billy.preferences);
System.out.println(Billy.name);

}
Run Code Online (Sandbox Code Playgroud)

}

例如,上面的代码打印出:

null 嬉皮士

我的最终目标是能够访问由 Hippie 构造函数创建的 HashMap。任何有关为什么它返回 null 而不是 HashMap 的见解将不胜感激。谢谢!

Sud*_*hul 5

class Hippie extends Customer {

    public HashMap<String, Double> preferences;

    Hippie() {
        name = "Hippie";
        preferences = new HashMap<String,Double>();
    }
}
Run Code Online (Sandbox Code Playgroud)

preferences不是在课外可见,作为你的内创建 constructor 。您需要将其声明为实例变量,然后在构造函数中对其进行初始化,以使其对外部类可见。

也一样name

虽然这可能会解决您的问题,但建议您执行以下操作:-

class Hippie extends Customer {

        private HashMap<String, Double> preferences

        Hippie() {
            name = "Hippie";
            preferences = new HashMap<String,Double>();
        }

    // have a getter for the hashmap
    public HashMap<String,Double> getMap(){
        return preferences;
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:-

Hippie billy = new Hippie(); // Couldn't digest `Billy` as object name.
System.out.println(billy.getMap()); 
Run Code Online (Sandbox Code Playgroud)