繁体   English   中英

实现可比较的界面

[英]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)并遵循返回的约定

  • -1如果A <B
  • 如果A == B,则为0
  • 如果A> B,则为1

另外,如果使用实例变量,则不应将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();
}

如果确实允许thingnull ,则应该为每个方法添加合适的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM