Comparable 接口的问题重写方法
Problem Overriding method from Comparable Interface
我有一个名为 Individuo
的抽象 class,它实现了 Comparable<Individuo>
接口。
然而,当我尝试覆盖 child classes 中的方法时,它实现了以下方法:
@Override
public int compareTo(Object o) {
return 0;
}
它不应该实现以下内容吗?
@Override
public int compareTo(Individuo o) {
return 0;
}
这是声明
个人:
public abstract class Individuo<I extends Individuo> implements Cloneable, Comparable<Individuo>
Individuo_MultiOOP (child):
public class Individuo_MultiOOP extends Individuo implements Cloneable
编辑 2(问题更新后)
因为 Individuo 是用通用类型声明的,所以使用
Comparable<Individuo<I>>
代替
Comparable<Individuo>
在声明中。
原回答
首先用实现声明保存 class 而不覆盖 compareTo()
-
public class IndividuoChild extends Individuo {
...
}
然后从编译器错误注释[可以在像 eclipse、intellij 这样的 IDE 中找到],select"Add unimplemented methods" 这将生成预期的 compareTo()
作为-
@Override
public int compareTo(Individuo o) {
// TODO Auto-generated method stub
return 0;
}
不,您应该使用相同的参数覆盖。它将更具可读性和易于理解。
class Individuo implements Comparable<Individuo>{
@Override
public int compareTo(Individuo o) {
return 0;
}
}
Child class
public class Child extends Individuo{
@Override
public int compareTo(Individuo o) {
// TODO Auto-generated method stub
return 0;
}
}
如果使用Object,设计可能有问题。
很可能 children 扩展了 Individuo
的原始版本,后者已被一些论点概括。
在这种情况下,children中的compareTo(Object o)
将编译:
abstract class Individuo<T> implements Comparable<Individuo<T>> {}
class Child extends Individuo {
@Override
public int compareTo(Object o) {
return 0;
}
}
确保 children 使用提供的所有通用参数扩展正确的 Individuo
:
class Child extends Individuo<Child> {
@Override
public int compareTo(Object o) { // this shouldn't compile
return 0;
}
}
@Override
public int compareTo(Individuo o) {
return 0;
}
如果您指定了通用类型,则这是需要重写的方法。我的意思是当你的 class 签名是:
public class Individuo implements Comparable < Individuo >
但如果您没有指定可比较接口的通用类型,则可以覆盖 public int compareTo(Object o) 方法。我的意思是如果你的 class 签名是:
public class Individuo implements Comparable
兄弟,如果你的问题得到解决,请告诉我
我有一个名为 Individuo
的抽象 class,它实现了 Comparable<Individuo>
接口。
然而,当我尝试覆盖 child classes 中的方法时,它实现了以下方法:
@Override
public int compareTo(Object o) {
return 0;
}
它不应该实现以下内容吗?
@Override
public int compareTo(Individuo o) {
return 0;
}
这是声明
个人:
public abstract class Individuo<I extends Individuo> implements Cloneable, Comparable<Individuo>
Individuo_MultiOOP (child):
public class Individuo_MultiOOP extends Individuo implements Cloneable
编辑 2(问题更新后)
因为 Individuo 是用通用类型声明的,所以使用
Comparable<Individuo<I>>
代替
Comparable<Individuo>
在声明中。
原回答
首先用实现声明保存 class 而不覆盖 compareTo()
-
public class IndividuoChild extends Individuo {
...
}
然后从编译器错误注释[可以在像 eclipse、intellij 这样的 IDE 中找到],select"Add unimplemented methods" 这将生成预期的 compareTo()
作为-
@Override
public int compareTo(Individuo o) {
// TODO Auto-generated method stub
return 0;
}
不,您应该使用相同的参数覆盖。它将更具可读性和易于理解。
class Individuo implements Comparable<Individuo>{
@Override
public int compareTo(Individuo o) {
return 0;
}
}
Child class
public class Child extends Individuo{
@Override
public int compareTo(Individuo o) {
// TODO Auto-generated method stub
return 0;
}
}
如果使用Object,设计可能有问题。
很可能 children 扩展了 Individuo
的原始版本,后者已被一些论点概括。
在这种情况下,children中的compareTo(Object o)
将编译:
abstract class Individuo<T> implements Comparable<Individuo<T>> {}
class Child extends Individuo {
@Override
public int compareTo(Object o) {
return 0;
}
}
确保 children 使用提供的所有通用参数扩展正确的 Individuo
:
class Child extends Individuo<Child> {
@Override
public int compareTo(Object o) { // this shouldn't compile
return 0;
}
}
@Override
public int compareTo(Individuo o) {
return 0;
}
如果您指定了通用类型,则这是需要重写的方法。我的意思是当你的 class 签名是:
public class Individuo implements Comparable < Individuo >
但如果您没有指定可比较接口的通用类型,则可以覆盖 public int compareTo(Object o) 方法。我的意思是如果你的 class 签名是:
public class Individuo implements Comparable
兄弟,如果你的问题得到解决,请告诉我