我正在使用 Java 8。我知道它有 lambda、方法引用等新功能。但我对这段代码感到困惑:
static class SRoad implements Comparable<SRoad> {
int id;
public SRoad(int id) {
this.id = id;
}
@Override
public int compareTo(SRoad o) {
return this.id - o.id;
}
}
public static void main(String[] args) {
ArrayList<SRoad> c = new ArrayList<>();
// Assume I added some instances in to the list...
c.sort((SRoad::compareTo));
}
上面的代码基本上根据 SRoad 的 id 对列表进行排序。请注意,在最后一行中,方法引用被一对额外的括号括起来。这不是拼写错误,java 必须这样才能工作。我发现这行代码相当于:
c.sort(((o1, o2) -> o1.compareTo(o2)));
为什么它们是等价的?这个语法是什么?
最佳答案
额外的括号是多余的。你可能会失去它们:
c.sort(SRoad::compareTo);
关于语法 -sort
有一个 Comparator
参数。这是一种获取要排序的列表中的任意两个元素并进行比较的方法。两种方式都传递这样的方法引用。
关于java - 用方括号括住方法引用是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55333287/