Adam 告诉你为什么你无法摆脱尝试强制 equals、hashCode 和 toString 的原因。我会选择以下实现,它涉及 Adam 和 Stephan 提供的解决方案:
public interface Distinct {
boolean checkEquals(Object other);
int hash();
}
public interface Stringable {
String asString();
}
public abstract class DistinctStringableObject {
@Override
public final boolean equals(Object other) {
return checkEquals();
}
@Override
public final int hashCode() {
return hash();
}
@Override
public final String toString() {
return asString();
}
}
现在,任何需要自己明确区分并表示为 String 的类都可以扩展 DistinctStringableObject,这将强制实现 checkEquals、hashCode 和 toString。
示例具体类:
public abstract class MyDistinctStringableObject extends DistinctStringableObject {
@Override
public final boolean checkEquals(Object other) {
...
}
@Override
public final int hash() {
...
}
@Override
public final String asString() {
...
}
}