我正在用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
并可能会处理错误。
答案 0 :(得分:3)
使用您的第一个代码,如果您执行以下操作,则会在运行时获得异常:
int i = new Flight().compareTo("xyz");
使用第二个代码,如果尝试这样做,将会出现编译时错误。
很抱歉,但这是泛型一般的基本优势,它适用于您发布的特定情况。泛型只是将大量的运行时错误移动到编译时。由于type erasure,他们并没有做更多的事情。
答案 1 :(得分:2)
在第一个例子中,你在运行时自己做了编译器在编译时可以为你做的事情(第二个例子)。
这就是两个片段之间差异的本质。