猿问

实现泛型接口的正确方法

该示例将显示在 上Comparable,但问题是关于所有类似情况。


所以 Comparable 是一个通用接口:


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回答 1
1回答

慕尼黑5688855

如果您使用第二个而不在第一个之前进行类型检查,那将没有任何意义。将其留给编译器进行这些检查,然后选择第一个选项。在这种特殊情况下,选择第一个选项可确保Comparator通过比较同一类型的两个对象 100% 的时间来履行您的合同。一般来说,如果泛型是在高级类中定义的,主要是有充分的理由通过提供更具可读性和可维护性的代码以及编译时类型检查来提供更好的可用性。
随时随地看视频慕课网APP

相关分类

Java
我要回答