Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

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

#java


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

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


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


Ответы

Ответ 1



Это конструктор с переменным числом аргументов типа Comparator. В вашем классе поле this.comparators вероятно имеет тип Comparator[] - то есть массив компараторов. Вызывать такой конструктор вы можете, например, такими способами: CustomizedComparator(); CustomizedComparator(comparator); CustomizedComparator(intCompataror, longComparator, stringComparator); и так далее. По сути это является синтаксическим сахаром для передачи массивов в методы/конструкторы.

Ответ 2



В JDK 5 была добавлена новая функциональная возможность, которая упрощает создание методов, принимающих переменное количество аргументов. Эта функциональная возможность получила название varargs. Сокращение термина variable-length arguments - аргументы переменной длины. Метод, который принимает переменное число аргументов, называют методом переменной арности, или просто методом varargs. For example

Ответ 3



Спасибо за пояснения и ответы. Попробовал на практике, удобно. public class Solution { public static void main(String[] args) { ArrayList women = new ArrayList(); women.add(new Woman("Катя", "Катина", 18)); women.add(new Woman("Маша", "Машина",21)); women.add(new Woman("Катя", "Сакина",5)); Comparator compareByName = new Comparator() { public int compare(Woman o1, Woman o2) { return o1.name.compareTo(o2.name); } }; Comparator compareByHeight = new Comparator() { public int compare(Woman o1, Woman o2) { return o1.age - o2.age; } }; Comparator compareBySurname = new Comparator() { public int compare(Woman o1, Woman o2) { return o1.surname.compareTo(o2.surname); } }; //Collections.sort(women, compareByHeight); CustomizedComparator customizedComparator = new CustomizedComparator(compareByName, compareByHeight); Collections.sort(women, customizedComparator); for (Woman w : women) { System.out.println(w.name + " " + w.surname + " " + w.age); } } public static class CustomizedComparator implements Comparator { private Comparator[] comparators; public CustomizedComparator(Comparator... 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; } } }

Комментариев нет:

Отправить комментарий