Как мне сделать 2 сопоставимых метода только в одном классе?

Я добавлю свои собственные открытия, которые я обнаружил с тех пор, как спросил:

К сожалению, кажется, что sprintf не обрабатывает форматирование тысяч разделителей, как формат строки .NET.

25
задан jzd 13 December 2010 в 19:42
поделиться

2 ответа

Что вам нужно сделать, это реализовать кастом Comparator . А затем используйте:

Collections.sort(yourList, new CustomComparator<YourClass>());

В частности, вы можете написать: (Это создаст класс Anonymous, который реализует Comparator.)

Collections.sort(yourList, new Comparator<YourClass>(){
    public int compare(YourClass one, YourClass two) {
        // compare using whichever properties of ListType you need
    }
});

Вы можете встроить их в свой класс, если Вам нравится:

class YourClass {

    static Comparator<YourClass> getAttribute1Comparator() {
        return new Comparator<YourClass>() {
            // compare using attribute 1
        };
    }

    static Comparator<YourClass> getAttribute2Comparator() {
        return new Comparator<YourClass>() {
            // compare using attribute 2
        };
    }
}

Это можно использовать так:

Collections.sort(yourList, YourClass.getAttribute2Comparator());
62
ответ дан 28 November 2019 в 18:11
поделиться

Если двум методам требуется одинаковая площадь, вы можете ненадлежащим образом перегружать один класс несколькими способами, что можно решить, исправив иерархию классов - например, вместо использования «shape», создайте подкласс с помощью «oval», «прямоугольник» и т. д.

Если создание подклассов не имеет смысла, вам нужно создать разные классы сравнения. В Java вы часто используете Comparator для сравнения. Создайте несколько (или создайте настраиваемый компаратор): IsbnComparator, AuthorComparator и т. Д.

Да, и настраиваемая опция будет:

 BookComparator implements Compartor {
   enum FIELD { AUTHOR, ISBN, ... };
   setSortOrder(int rank, FIELD field){...}
 }
3
ответ дан 28 November 2019 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: