你是正确的:这个成语并 不能 阻止比较不同类的类。它所做的只是确保比较对象也实现相同的接口。如果只需要比较相同的类型,则可以由实现类强制实施。
您所说的“ 漏洞 ”就是我所谓的“ 故意做您不想做的事情 ”。
__如果需要* 这种行为,可以将 Foo 对象与 A 对象进行比较。 *
这是一个功能,而不是漏洞。
如果您希望 Foo 与其他 Foos 具有可比性,则应定义 Foo 来实现
IComparable<Foo>。
如果您 不 希望 Foo 与 A 相当,那么您 不应 定义 Foo
来实现
IComaparable<A>。除非有人试图故意编写破损的代码,否则为什么有人会这样做呢?
@caskey已提供您问题的实际答案:
“ 不,您不能使用Java中的接口来完成您想做的事情。[您必须使用类来完成。 ”
您错过了一件事:
因此(除非我误解了一些东西),与不那么戏剧性的相比,原始成语并没有买更多的东西:
public interface IComparable<T>
在 原来的成语 不 买你的东西。它强制比较对象 必须 实现 IComparable
。不太生动的示例将允许您无限制地将实现类与任何对象进行比较。所以…编译器将允许您将
Long,或
InputStream,或
linkedHashSet<Byte[]>或任何其他内容指定为类型参数。
当您以这种方式看待它时,很容易看出为什么这种习语如此普遍。



