Как определить метод compareTo ()? - PullRequest
0 голосов
/ 22 февраля 2019

Контекст:

У меня есть 3 различных типа форматеров текста:

  1. SnakeCaseFormatter, который преобразует строки, например, «Hello World» в «hello_world»
  2. KebabCaseFormatter, который преобразует строки, например "Hello World", в "hello-world"
  3. PascalCaseFormatter, который преобразует строки, например, "HellO WoRld" в "HelloWorld"

и эти 3Типы реализует Comparable, где TextFormatter является интерфейсом:

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

Как реализовать метод compareTo () так, чтобы метод compareTo (TextFormatter o) сравнивал текущий объект с другим объектом;Возвращает отрицательное число, если оно предшествует другому объекту, положительное число, если оно идет после другого объекта, и 0, если они считаются одинаковыми по порядку?

1 Ответ

0 голосов
/ 22 февраля 2019

Полагаю, вы хотите сравнить отформатированные значения.В противном случае, как говорит @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());
    }
}

Кстати, вам не нужно 'public 'определители в вашем интерфейсе.Сигнатуры методов в интерфейсе должны быть открытыми, так что это избыточно.

Может быть, вы хотите сравнить необработанные строки для удобства.Это не сумасшествие.Я не могу написать этот метод для вас, потому что я не знаю, как вы храните свои строки.Вы можете заменить их значения на «format ()» в предоставленном мною коде, но вам нужен геттер в интерфейсе, чтобы он оставался общим для механизма хранения или деталей каждого класса.

...