我使用java.util.Hashtable创建了一个Java字典,其中2个字符串的字符串作为键,而int作为值.
class pair<e,f>{
public e one;
public f two;
}
我曾经在上述类中初始化字典:
Dictionary<pair<String, String>, Integer> dict = new Hashtable();
现在,我无法检查dict中是否存在密钥,这意味着我无法将字符串对作为dict.containsKey()方法的参数传递.
解决方法:
尝试这样的事情:
public class Pair<E, F> {
private final E e;
private final F f;
public Pair(E e, F f) {
this.e = e;
this.f = f;
}
public E getE() {
return e;
}
public F getF() {
return f;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Pair<E,F> other = (Pair<E,F>) obj;
if (!this.e.equals(other.getE())) {
return false;
}
if (!this.f.equals(other.getF())) {
return false;
}
return true;
}
@Override
public int hashCode() {
hash = 53 * e.hashCode() + f.hashCode();
return hash;
}
}
我假设e和f不为null.如果可以为null,则必须在if(e.equals(other.getE()))之前检查e == null是否阻止NPE.
进一步说明:
>在几乎所有情况下,您都应将班级成员设为私人
(静态成员除外).
> Proper Java convention is to have class names in CapitalizedWords
.
> Generic type parameters should be a single upper-case character.