如何定义方法CompareTo()



上下文:

我有3种不同类型的文本格式:

  1. snakecaseformatter转换字符串,例如" Hello World"到" Hello_world"
  2. kebabcaseformatter转换字符串,例如" Hello World"到" Hello-World"
  3. pascalcaseformatter转换字符串,例如" Hello World"到" Helloworld"

,这三种类型的实现是可比的,其中textformatter是接口:

interface TextFormatter { 
  public TextFormatter clone(String s);
  public String format();
}

如何实现compareTo()方法,以使compareTo(textformatter o)方法将当前对象与另一个对象进行比较;如果它在另一个对象之前返回一个负数,则返回一个正数,如果是在另一个对象之后,则为0,如果将它们视为相同的订单?

我假设您想比较格式的值。否则,就像@mohamed所说,可以比较字符串本身。这将比较格式的值:

interface TextFormatter {
    public TextFormatter clone(String s);
    public String format();
}
class SnakeCaseFormatter implements TextFormatter, Comparable<TextFormatter> {
    ...
    @Override
    public int compareTo(TextFormatter other) {
        return format().compareTo(other.format());
    }
}

您可以将此方法放在界面中,因为Java的最新版本:

interface TextFormatter extends Comparable<TextFormatter> {
    TextFormatter clone(String s);
    String format();
    @Override
    default int compareTo(@NotNull TextFormatter other) {
        return format().compareTo(other.format());
    }
}

顺便说一句,您不需要界面中的"公共"预选赛。接口中的方法签名必须公开,所以这是多余的。

为了方便起见,也许您确实想比较原始字符串。那不是疯了。我不能为您写这种方法,因为我不知道您如何存储自己的字符串。您可以在我提供的代码中将其值替换为" format()",但是您需要在接口中获得一个getter,以便它可以对存储机制或每个类的详细信息保持一般性。

最新更新