と呼ばれるクラスがあり、オブジェクトNumber
の等価比較をたくさん行うつもりだとしましょう。ジェネリックメソッドNumber
の「オーバーヘッド」(クラス比較など)が気になります。この場合、?の代わりにNumber::equals(Object o)
などの方法を提供することは有用ですか?これは一般的なパターンですか?または、JVMは現在、これを行う利点がないほど十分に最適化されていますか?Number::isEqualTo(Number other)
Number::equals(Object o)
コード例は次のとおりです。
public class Number {
int _value;
Number(int value) {
_value = value;
}
@Override
public boolean equals(final Object o) {
if (o == this) return true;
if (o == null) return false;
if (o.getClass() != getClass()) return false;
return isEqualTo((Number)o);
}
public boolean isEqualTo(final Number other) {
return _value == other._value;
}
public static void main(String[] args) {
Number one = new Number(1);
Number two = new Number(2);
if (!one.isEqualTo(two)) {
System.out.println("fast comparison?");
}
if (!one.equals(two)) {
System.out.println("slow comparison?");
}
}
}