在Java中接收某种类型的方法使用类型接口有什么好处?

时间:2017-09-03 06:47:31

标签: 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;
    }
}

现在我了解到我们还可以按如下方式向界面添加类型:

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

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

我对Java很新,我怀疑添加类型必须有一些好处,因为从表面上看,实现实现了相同的目标。此外,compareTo(Object o)的实现似乎可能会为我们提供更多信息,因为我们可能正在测试instanceof并可能会处理错误。

2 个答案:

答案 0 :(得分:3)

使用您的第一个代码,如果您执行以下操作,则会在运行时获得异常:

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

使用第二个代码,如果尝试这样做,将会出现编译时错误。

很抱歉,但这是泛型一般的基本优势,它适用于您发布的特定情况。泛型只是将大量的运行时错误移动到编译时。由于type erasure,他们并没有做更多的事情。

答案 1 :(得分:2)

在第一个例子中,你在运行时自己做了编译器在编译时可以为你做的事情(第二个例子)。

这就是两个片段之间差异的本质。