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

在新变量声明中覆盖方法

在新变量声明中覆盖方法

喵喔喔 2023-05-10 17:21:32
在处理一个项目时,我遇到了以下代码段,它似乎提供了代码,完全包含在一个新的变量声明中,它似乎覆盖了一个方法。我以前遇到过这种形式的代码,但不可否认,我并不完全理解它。如果有人能解释此代码所基于的编程机制,我将非常感激。特别是,何时允许在变量声明中使用此类重写方法。还有哪些其他类型的数据结构允许这种行为?什么时候编写这种性质的代码比较有利?为什么不覆盖变量声明之外的方法?tempRequests.sort(new Comparator<Integer>() {               @Override    public int compare(Integer integer1, Integer integer2)     {                   return integer1.compareTo(integer2);            }});
查看完整描述

2 回答

?
千巷猫影

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

还有哪些其他类型的数据结构允许这种行为?


-> 您可以通过实现接口 Comparable 对对象进行排序。例如:


 public class Car implements Comparable<Car> {

     private String name;

     @Override

     public int compareTo(Car b) {

     return name.compareTo(b.name);

      }

    }

->您也可以在内部类中使用没有覆盖方法比较的比较器。


public class Car implements Comparator<Car> {

     private String name;

     private double price;

     @Override

     public int compare(Car b1, Car b2) {

     return b1.price - b2.price;

      }

    }

什么时候编写这种性质的代码比较有利?为什么不覆盖变量声明之外的方法?


-> 想象一下,在使用按名称对对象 Car 进行排序后,您想按其他方式(如按价格、按重量)进行排序。当您想在不同时间以不同方式对对象进行排序时,如何做到这一点?我们在内部类中使用 Comparator 和 define 来做到这一点。


*此外,Comparator 是一个功能接口,因为它是唯一要实现的抽象方法。您可以在一行代码中使用时髦的语法重写:例如:


Compareator<Car> byPrice = (b1,b2) -> b1.price - b2.price;


查看完整回答
反对 回复 2023-05-10
?
互换的青春

TA贡献1797条经验 获得超6个赞

这个机制已经在评论中得到了很好的解释。顺便说一句:自 Java 8 以来,这种匿名类的用法被认为有些过时,因为它可以用简单的 Lambda 表达式代替:

tempRequests.sort((l, r) -> l.compareTo(r));

这适用于所有“功能接口”,它被定义为具有恰好一个非静态和非默认方法的接口。


查看完整回答
反对 回复 2023-05-10
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

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