【发布时间】:2011-07-06 15:31:36
【问题描述】:
我想使用这样的界面:
public interface ResultItem {
public int getConfidence();
public boolean equals(ResultItem item);
public ResultItem cloneWithConfidence(int newConfidence);
}
我已经通过代表语音识别结果的不同类型的对象来实现它。
我的想法是,我只想比较同类的结果。也就是说,如果我创建一个实现ResultItem 的类IntResult,我希望方法签名变为:
public boolean equals(IntResult item);
public IntResult cloneWithConfidence(int newConfidence);
我觉得我的界面存在设计缺陷,因为现在我对 cloneWithConfidence 和其他返回 ResultItem 的方法的结果使用了非常丑陋的强制转换。
有没有更好的办法?
【问题讨论】:
-
如果你按照你发帖的方式做会发生什么?
-
-
你最好继续哭。您需要为
equals覆盖Object.equals(Object other)以用于集合等。忘记您的专用版本,它可能更好但不会在任何地方使用(除非您明确调用)。 编写专用版本,您可能会忘记编写最重要的版本。 -
将对象与其他任意类型的对象进行比较并没有什么不妥之处。当被问及是否等于 Odie(一只狗)时,加菲猫(一只猫)不应该尖叫,无论他会感到多么愤慨。他应该简单地回答不,他是不平等的。如果加菲猫能识别出任何与他平等的事物,那么无法识别某些事物并不意味着他不知道自己是否平等。相反,无法识别某事本身就证明他不等于它。