java - 在 Java 中使用类型化接口(interface)比接收特定类型的方法有什么优势?

标签 java generics types interface

我正在用 Java 编写一个类,我想实现 Comparable 接口(interface)。这是类:

public class Flight implements Comparable {
    private int flightTime;
    public int compareTo(Object o) {
        Flight f = (Flight) o;
        return this.flightTime - f.flightTime;
    }
}

现在我知道了我们还可以给接口(interface)添加类型,如下所示:

public class Flight implements Comparable<Flight> {
    private int flightTime;
    public int compareTo(Flight f) {
        return this.flightTime - f.flightTime;
    }
}

第二种实现的优点是什么(请不要将问题简化为一般泛型的优点)?

我是 Java 的新手,我怀疑添加类型一定有一些好处,因为从表面上看,实现实现了相同的目标。此外,看起来 compareTo(Object o) 的实现可能会为我们提供更多信息,因为我们可以测试 instanceof 并可能处理错误。

最佳答案

对于您的第一个代码,如果您执行以下操作,您将在运行时遇到异常:

int i = new Flight().compareTo("xyz");

对于您的第二个代码,如果您尝试这样做,您将遇到编译时错误。

抱歉,这通常是泛型的基本优势,它适用于您发布的特定案例。泛型只是将大量运行时错误转移到编译时。因为type erasure ,他们实际上并没有做更多的事情。

关于java - 在 Java 中使用类型化接口(interface)比接收特定类型的方法有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46020975/

相关文章:

java - Java 输出的说明

java - 字符串常量池在java中是如何工作的

swift - 进一步限制 Swift 协议(protocol)中的通用函数

c# - 从实现的泛型转换为接口(interface)类型的泛型

mysql - MySQL 中 int 括号中的属性的用途是什么?

java - Swing:如何从 JTable 中拖动多行?

java - 使用 AppEngine 管理不同的开发阶段

c11 _Generic 添加类型

json - Go 的 .(type) 在解码 JSON 时做一些意外的事情

c# - 定义类型别名