java - 实现通用接口(interface)的正确方法

标签 java oop generics inheritance

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

所以 Comparable 是一个通用接口(interface):

public interface Comparable<T>

我们可以通过两种方式来实现(主要):

  1. 使用泛型类型实现并覆盖 compareTo具有已知类型参数的方法:

    MyClass implements Comparable<MyClass> {
       @Override
       public int compareTo(MyClass o) {
          return myVar.compareTo(o.myVar)
       }
    }
    
  2. 不使用泛型类型实现,并使用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/

相关文章:

java - 如何指示 Mapstruct 使用 lombok builder?

java - 具有多个主题的观察者模式

c# - 2个C#类相互包含为成员

java - 我的递归列表的前置功能创建了一个无限列表

Java 泛型 : matching the type of a parameter

java - Thymeleaf 未加载 css 和 js

java - 有没有办法计算 jar 文件中使用的方法的数量

mysql 中的 Java 枚举

java - super(variableName) 之间的区别;和 super.variableName

java - 在 Java 中继承泛型接口(interface)