Java 如何:使用自定义类作为映射参数

Java 如何:使用自定义类作为映射参数,java,class,map,Java,Class,Map,我在第9行得到了nullpointerexception(带有注释的那一行) 我正在尝试将该方法用作shoppingCart类中的参数: import java.util.*; public class ShoppingCart { private Map<String, Purchase> ShoppingCart; public void add (String product, int price) { Purchase purchase

我在第9行得到了nullpointerexception(带有注释的那一行)

我正在尝试将该方法用作shoppingCart类中的参数:

import java.util.*;

public class ShoppingCart {

    private Map<String, Purchase> ShoppingCart;

    public void add (String product, int price) {
        Purchase purchase = new Purchase(product, 1, price);
        ShoppingCart.put(product, purchase);         //this line doesn't work!
    }

    public int price() {
        Collection<Purchase> total = shoppingCart.values();

        }   
}
Main尝试将产品添加到shoppingCart,这会导致nullpointerexception:

ShoppingCart cart = new ShoppingCart();
cart.add("milk, 3);

我想我在地图上遗漏了一些基本的东西。我做错了什么?

您从未创建
ShoppingCart
对象。这不是像C++那样,在定义变量时创建对象;所有变量实际上都是对对象的引用,您需要明确地创建对象(使用
new

顺便说一句,此行导致编译错误(shoppingCart应为小写)

私人地图购物车;

您忘记实例化地图
ShoppingCart=newhashmap()


顺便说一下,在java中,变量总是以小写字母(camelCase)开头,只有类以大写字母(PascalCase)开头。

我认为问题在于您没有初始化购物车:

private Map<String, Purchase> ShoppingCart= new HashMap<String,Purchase>()
private Map ShoppingCart=new HashMap()

业余错误:)谢谢!它是芬兰语的,所以必须做一些翻译。下次会更仔细。创建贴图对象。变量名也遵循驼峰式大小写。
private Map<String, Purchase> ShoppingCart;
private Map<String, Purchase> ShoppingCart= new HashMap<String,Purchase>()