#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) { ArrayListwomen = 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; } } }
Комментариев нет:
Отправить комментарий