为了账号安全,请及时绑定邮箱和手机立即绑定

在排序方法中使用匿名类

在排序方法中使用匿名类

梦里花落0921 2022-01-12 10:12:01
为什么如果我在 List 的排序方法中放置一个带有 Comparator 的匿名类,编译器会显示错误?我的代码:public class Example2 {public static void main(String[] args) {   List<String> l = Arrays.asList("a","b","c","d");   l.sort(Comparator<String> c= new Comparator<>() {   //compiler error        public int compare(String a, String b) {            return b.compareTo(a);        }   });}sort 方法接受一个比较器。如果我编写此代码,它将编译:public class Example2 {public static void main(String[] args) {   List<String> l = Arrays.asList("a","b","c","d");   l.sort(new Comparator<String>() {                  //it's ok        public int compare(String a, String b) {            return b.compareTo(a);        }   });}或者这段代码:public class Example2 {public static void main(String[] args) {   List<String> l = Arrays.asList("a","b","c","d");   Comparator <String> c = new Comparator<String>() {             public int compare(String a, String b) {            return b.compareTo(a);        }   };   l.sort(c);                               //it's ok}为什么会这样?非常感谢!
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

第一个失败,因为它是一项任务。sort 方法需要一个 Comparator 类的对象。因此,当您说 sort(new Comparator) 时,您正在创建一个新的 Comparator 并立即将其传递给 sort 方法。当你有 Comparator c = new Comparator () 然后你有 sort(c) 时,你创建一个新的 Comparator,将它存储在变量 c 中,并将它传递给 sort 方法。

第一段代码尝试为变量 c 分配一个新的 Comparator 并将其传递给方法 sort,java 的语法不允许这样做。这类似于拥有一个将一个整数作为参数并写入 foo(int bar = 7) 的方法。这不太合理。


查看完整回答
反对 回复 2022-01-12
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

在第二个示例中,您没有将比较器提供给方法,而是将其分配给“c”引用。在第三个示例中,您将其分配给 c 引用,然后将其分配给 sort 方法。

希望这可以帮助 :)


查看完整回答
反对 回复 2022-01-12
?
莫回无

TA贡献1865条经验 获得超7个赞

这里的问题不是您正在传递一个匿名类。


l.sort(Comparator<String> c= new Comparator<>() { ... });

这是试图声明一个变量,c. 变量声明是语句,因此不能在表达式中使用。(声明匿名类时也不能使用菱形运算符)。


如果你想声明一个变量来保存那个比较器,并在排序调用中分配它,你可以像这样:


Comparator<String> c;

l.sort(c = new Comparator<String>() { ... });

但我怀疑这不是你想要的。


查看完整回答
反对 回复 2022-01-12
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信