示例将显示在Comparable
上,但问题是关于所有类似的情况。
所以 Comparable 是一个通用接口(interface):
public interface Comparable<T>
我们可以通过两种方式来实现(主要):
使用泛型类型实现并覆盖
compareTo
具有已知类型参数的方法:MyClass implements Comparable<MyClass> { @Override public int compareTo(MyClass o) { return myVar.compareTo(o.myVar) } }
不使用泛型类型实现,并使用compareTo 和
Object
参数:MyClass implements Comparable { @Override public int compareTo(Object o) { return myVar.compareTo(((MyClass)o).myVar) } }
哪种方法更容易被接受?彼此有什么优点和缺点? 我认为第一种方法更好,因为没有额外的转换,但这是唯一的优点吗?
最佳答案
如果您使用第二个而不在第一个之前进行类型检查,则没有任何意义。将其留给编译器进行这些检查并仅选择第一个选项。
在这种特殊情况下,选择第一个选项可确保通过 100% 比较同一类型的两个对象来履行您的 Comparator
契约。
一般来说,如果泛型是在高级类中定义的,那么主要是有充分理由通过提供更具可读性和可维护性的代码以及编译时类型检查来实现更好的可用性。
关于java - 实现通用接口(interface)的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55093082/