Компаратор упоминается как объект и интерфейс - PullRequest
0 голосов
/ 28 мая 2018

Я понимаю, что непонимание этого может показать более глубокую проблему в моем понимании Java, но при проверке документов Java я утверждаю, что Comparator - это Интерфейс.Затем, когда я создаю объект «компаратора», я могу сделать это только потому, что импортирую java.util.Comparator.

Но, учитывая, что Интерфейс не определяет методы И интерфейсы не имеют конструктора (или они..?), как я могу создать экземпляр объекта сравнения?Откуда исходит определенный метод?

1 Ответ

0 голосов
/ 28 мая 2018

java.uti.Comparator - это интерфейс.Интерфейсы не могут быть созданы - они могут быть реализованы только классами или расширены другими интерфейсами.

Если класс претендует на реализацию интерфейса, все методы, определенные этим интерфейсом, должны появиться в его исходном коде, прежде чем класс сможет успешноcompile.

Для данного типа T (T - это тип класса объектов, который нужно сравнивать), в отличие от любого другого экземпляра объекта, обычно создается экземпляр анонимного класса, который реализует компаратор, а не сам интерфейс,Это подобно любому другому объекту и его типу Comparator, поэтому может быть передан в качестве аргумента методам Collections.sort или Arrays.sort.

 Comparator<T> c = new Comparator<T>() {
        @Override
        public int compare(T o1, T o2) {
            return 0;
        }
 };
...