gpt4 book ai didi

java - 当引用实例对象时,在 Constructor 内部创建的填充 HashMap 返回 null

转载 作者:行者123 更新时间:2023-11-29 07:59:08 25 4
gpt4 key购买 nike

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

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

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

Class Hippie extends Customer{

Hippie() {
name = "Hippie";

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

}

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

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

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

}

例如上面的代码打印出:

空嬉皮士

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

最佳答案

class Hippie extends Customer {

public HashMap<String, Double> preferences;

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

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

同样适用于 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;
}
}

然后像这样使用它:-

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

关于java - 当引用实例对象时,在 Constructor 内部创建的填充 HashMap 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com