自定义类不能用作HashMap键

时间:2014-05-19 21:18:51

标签: java hashmap

我有以下代码:

import java.util.*;

class A {
    int x;

    A() { x = 0; }
    A(int t) { x = t; }

    public int hashCode() { return x; }
    public boolean equals(A that) { return x == that.x; }
}

class Test {

    static HashMap<A, Integer> stuff;

    public static void main(String[] args) {
        stuff = new HashMap<A,Integer>();
        A a = new A(1);
        stuff.put(a, 100);
        System.out.println(stuff.get(a).toString());
        System.out.println(stuff.get(new A(1)).toString());
    }
}

为什么第二个印刷语句会给我一个NullPointerException

1 个答案:

答案 0 :(得分:16)

你没有凌驾于equals()。正确的签名是

public boolean equals(Object o)
                      ^^^^^^

请注意,类型为Object,而非A。你做的是重载equals()