在 Java 中,与接收特定类型的方法相比,类型化接口有什么优点?

Yos*_*Yos 2 java generics types interface

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

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

现在我了解到我们还可以向接口添加类型,如下所示:

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

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

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

Ted*_*opp 5

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

int i = new Flight().compareTo("xyz");
Run Code Online (Sandbox Code Playgroud)

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

抱歉,但这通常是泛型的基本优势,它适用于您发布的特定案例。泛型只是将许多运行时错误转移到编译时。由于类型擦除,它们实际上并没有做更多的事情。

  • @Yos-当然。但这引入了“instanceof”测试(使您的实现变得复杂),如果“instanceof”测试失败,您会怎么做?该方法必须返回一些“int”值或抛出异常。如果是前者,那么您允许调用代码将“Flight”的实例与任何东西进行比较(从而为无意义的输入生成明显有意义的结果),如果是后者,那么调用代码必须处理可能的异常,从而使情况复杂化代码也是如此。(另外,您还没有避免运行时错误。) (3认同)