[英]Implementing the comparable interface
我刚刚发现这个考试题目,无法弄清楚:
下面描述了一个实现Comparable接口的设计部分类。 这个设计类的唯一目的是将它的实例与给定的字符串进行比较。
我们需要在课堂上填写两件事来完成它。 这是班级:
public class PrivateComparableClass // FILL IN PART 1 {
private String thing;
public PrivateComparableClass(String thing) {
this.thing=thing;
}
//FILL IN PART 2
}
我假设第1部分只对应于:
public class PrivateComparableClass implements Comparable {
第2部分,我假设他期待compareTo方法的实现,但我真的不知道如何正确地实现这个:
public static int compareTo() {
if this.thing.equals(thing){
return 1;
} else {
return -1;
}
}
我该如何解决这个问题?
首先,第1部分应该是:
public class PrivateComparableClass implements Comparable<PrivateComparableClass> {
至于第2部分,如果thing
是类中唯一的数据成员,你可以简单地搭载String.compareTo
:
public int compareTo(PrivateComparableClass rhs) {
return this.thing.compareTo(rhs.thing);
}
我建议您阅读compareTo
工作方式 (有三种可能的结果:小于,等于和大于)。
扩大一点:
比较器函数通常采用两个参数(让我们称之为A和B)并遵循返回的约定
另外,如果使用实例变量,则不应将compareTo声明为“static”。
首先, Comparable
接口是通用的; 你的声明应该指定一个类型参数:
public class PrivateComparableClass
implements Comparable<PrivateComparableClass> {
然后,您应该在compareTo()
方法(它是实例方法,而不是类成员)中比较类的thing
成员。
@Override
public final int compareTo(PrivateComparableClass that) {
return this.thing.compareTo(that.thing);
}
行为良好的Comparable
应该实现一个equals()
方法是其一贯compareTo()
方法:
@Override
public final boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof PrivateComparableClass))
return false;
return compareTo((PrivateComparableClass) obj) == 0;
}
并且,当您重写equals()
,您还需要覆盖hashCode()
:
@Override
public final int hashCode() {
return thing.hashCode();
}
如果确实允许thing
为null
,则应该为每个方法添加合适的null检查行为。
好吧,这或多或少是如何声明和实现类的
public class PrivateComparableClass implements Comparable<PrivateComparableClass>
{
private String thing;
//... other stuff
public int compareTo(PrivateComparableClass o)
{
return this.thing.compareTo(o.thing);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.