令人反感的方法是:
@Overridepublic int compareTo(Real other) { ... }public int compareTo(Object other) { ... }这些方法具有相同的
Erase
,这意味着一旦编译器剥离了通用类型信息,就不再有在运行时区分它们的方法。
您的选择是消除
compareTo(Object other)重载,或者
Real实施
Comparable<Object>。
由于看起来您所有
compareTo重载的实现都只是实例化一个新的
Real并将其传递给
compareTo(Real),所以我建议删除它们并将转换留给调用者:
Real real = ...;Object compared = ...;Real comparedAsReal = new Real(compared);int result = real.compareTo(comparedAsReal);



