StringBuffer не дает ClassCastException при попытке добавить в древовидную структуру без Comparator - PullRequest
0 голосов
/ 27 февраля 2020

Я ожидал ClassCastException при попытке запустить следующий фрагмент кода:

 //  TreeSet<StringBuffer> t = new TreeSet<StringBuffer>((a, b) -> - 
  // a.toString().compareTo(b.toString()));
     TreeSet<StringBuffer> t = new TreeSet<StringBuffer>();
        Function<String, StringBuffer> f = s -> new StringBuffer(s);
        t.add(f.apply("A"));
        t.add(f.apply("M"));
        t.add(f.apply("B"));
        t.add(f.apply("Z"));
        t.add(f.apply("G"));
        System.out.println(t);

Я прокомментировал код компаратора и пытался использовать без компаратора. Но я все еще получаю правильный вывод. Как это возможно, потому что StringBuffer не реализует Comparable интерфейс. Я использую Java 11. Были ли какие-либо изменения, сделанные в более поздней версии, связанные с этим.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Это возможно, потому что StringBuffer реализует интерфейс Comparable.

1 голос
/ 27 февраля 2020

Вы преобразуете StringBuffer в String в компараторе, а класс String реализует интерфейс Comparable, а также в качестве примечания, начиная с jdk-11 StringBuffer и StringBuilder также реализует Comparable

(a, b) -> -a.toString().compareTo(b.toString())

Но если у вас более низкая версия ниже jdk-11, вы получите ошибку времени компиляции

Метод compareTo (StringBuffer) не определен для типа StringBuffer

...