Владислав Asked:2020-06-09 19:58:59 +0000 UTC2020-06-09 19:58:59 +0000 UTC 2020-06-09 19:58:59 +0000 UTC java构造函数中的点 772 有一个构造函数 public CustomizedComparator(Comparator<T>... comparators) { this.comparators = comparators; } 问题是,其中的三个点是什么意思? java 3 个回答 Voted Best Answer iksuy 2020-06-09T20:11:35Z2020-06-09T20:11:35Z 这是 类型的可变参数构造函数Comparator<T>。 在您的班级中,该字段this.comparators可能有一个类型Comparator<T>[]——即一个比较器数组。 例如,您可以通过以下方式调用此类构造函数: CustomizedComparator(); CustomizedComparator(comparator); CustomizedComparator(intCompataror, longComparator, stringComparator); 等等。 这本质上是将数组传递给方法/构造函数的语法糖。 Vladimir Glinskikh 2020-06-09T20:14:59Z2020-06-09T20:14:59Z JDK 5中添加了新功能,可以更轻松地创建采用可变数量参数的方法。此功能称为varargs. 术语的缩写variable-length arguments- 可变长度参数。 采用可变数量参数的方法称为可变元数方法,或简称为方法varargs。 例如 Владислав 2020-06-09T20:55:32Z2020-06-09T20:55:32Z 感谢您的澄清和答复。我在实践中尝试过,很方便。 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; } } }
这是 类型的可变参数构造函数
Comparator<T>。在您的班级中,该字段
this.comparators可能有一个类型Comparator<T>[]——即一个比较器数组。例如,您可以通过以下方式调用此类构造函数:
CustomizedComparator();CustomizedComparator(comparator);CustomizedComparator(intCompataror, longComparator, stringComparator);等等。
这本质上是将数组传递给方法/构造函数的语法糖。
JDK 5中添加了新功能,可以更轻松地创建采用可变数量参数的方法。此功能称为
varargs.术语的缩写
variable-length arguments- 可变长度参数。采用可变数量参数的方法称为可变元数方法,或简称为方法
varargs。例如
感谢您的澄清和答复。我在实践中尝试过,很方便。