Точки в Конструктор java

436
10 июня 2017, 13:36

Есть конструктор

public CustomizedComparator(Comparator<T>... comparators) {
        this.comparators = comparators;
    }

Вопрос в том, что значат эти три точки в нем?

Answer 1

Это конструктор с переменным числом аргументов типа Comparator<T>.

В вашем классе поле this.comparators вероятно имеет тип Comparator<T>[] - то есть массив компараторов.

Вызывать такой конструктор вы можете, например, такими способами:

CustomizedComparator();

CustomizedComparator(comparator);

CustomizedComparator(intCompataror, longComparator, stringComparator);

и так далее.

По сути это является синтаксическим сахаром для передачи массивов в методы/конструкторы.

Answer 2

В JDK 5 была добавлена новая функциональная возможность, которая упрощает создание методов, принимающих переменное количество аргументов. Эта функциональная возможность получила название varargs.

Сокращение термина variable-length arguments - аргументы переменной длины.

Метод, который принимает переменное число аргументов, называют методом переменной арности, или просто методом varargs.

For example

Answer 3

Спасибо за пояснения и ответы. Попробовал на практике, удобно.

public class Solution {
public static void main(String[] args) {
    ArrayList<Woman> women = new ArrayList<Woman>();
    women.add(new Woman("Катя", "Катина", 18));
    women.add(new Woman("Маша", "Машина",21));
    women.add(new Woman("Катя", "Сакина",5));
    Comparator<Woman> compareByName = new Comparator<Woman>() {
        public int compare(Woman o1, Woman o2) {
            return o1.name.compareTo(o2.name);
        }
    };
    Comparator<Woman> compareByHeight = new Comparator<Woman>() {
        public int compare(Woman o1, Woman o2) {
            return o1.age - o2.age;
        }
    };
    Comparator<Woman> compareBySurname = new Comparator<Woman>() {
        public int compare(Woman o1, Woman o2) {
            return o1.surname.compareTo(o2.surname);
        }
    };
    //Collections.sort(women, compareByHeight);
    CustomizedComparator<Woman> customizedComparator = new CustomizedComparator<Woman>(compareByName, compareByHeight);
    Collections.sort(women, customizedComparator);
    for (Woman w : women) {
        System.out.println(w.name + " " + w.surname + " " + w.age);
    }
}
public static class CustomizedComparator<T> implements Comparator<T> {
    private Comparator<T>[] comparators;
    public CustomizedComparator(Comparator<T>... comparators) {
        this.comparators = comparators;
    }
    @Override
    public int compare(T o1, T o2) {
        int result = 0;
        for (int i = 0; i < comparators.length; i++) {
            result = comparators[i].compare(o1,o2);
            if (result != 0) {
                break;
            }
        }
        return result;
    }
}
public static class Woman
{
    public String name;
    public String surname;
    public int age;

    public Woman(String name, String surname, int age) {
        this.age = age;
        this.name = name;
        this.surname = surname;
    }
}

}

READ ALSO
Реализация чата на rxjava+retrofit

Реализация чата на rxjava+retrofit

Сервер при запросе возвращает json схему чата(дата, время, id пользователя, его сообщение и тд), c помощью retrofit я создал метод запроса чата

246
Как привязать input к тексту?

Как привязать input к тексту?

Тоисть у меня есть input и мне нужно чтобы он активировался не отдельной клавишей а кликом по тексту//

339
.htaccess из php в html

.htaccess из php в html

Как вhtaccess прописать замену

312
Не выводятся данные range слайдера из jquery-ui

Не выводятся данные range слайдера из jquery-ui

Делаю range-slider при помощи jquery-ui и столкнулся с проблемой вывода данных

309