猿问

在新变量声明中覆盖方法

在处理一个项目时,我遇到了以下代码段,它似乎提供了代码,完全包含在一个新的变量声明中,它似乎覆盖了一个方法。我以前遇到过这种形式的代码,但不可否认,我并不完全理解它。如果有人能解释此代码所基于的编程机制,我将非常感激。特别是,何时允许在变量声明中使用此类重写方法。还有哪些其他类型的数据结构允许这种行为?什么时候编写这种性质的代码比较有利?为什么不覆盖变量声明之外的方法?


tempRequests.sort(new Comparator<Integer>() 

{           

    @Override


    public int compare(Integer integer1, Integer integer2) 

    {           

        return integer1.compareTo(integer2);        

    }



});


喵喔喔
浏览 128回答 2
2回答

千巷猫影

还有哪些其他类型的数据结构允许这种行为?-> 您可以通过实现接口 Comparable 对对象进行排序。例如:&nbsp;public class Car implements Comparable<Car> {&nbsp; &nbsp; &nbsp;private String name;&nbsp; &nbsp; &nbsp;@Override&nbsp; &nbsp; &nbsp;public int compareTo(Car b) {&nbsp; &nbsp; &nbsp;return name.compareTo(b.name);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }->您也可以在内部类中使用没有覆盖方法比较的比较器。public class Car implements Comparator<Car> {&nbsp; &nbsp; &nbsp;private String name;&nbsp; &nbsp; &nbsp;private double price;&nbsp; &nbsp; &nbsp;@Override&nbsp; &nbsp; &nbsp;public int compare(Car b1, Car b2) {&nbsp; &nbsp; &nbsp;return b1.price - b2.price;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }什么时候编写这种性质的代码比较有利?为什么不覆盖变量声明之外的方法?-> 想象一下,在使用按名称对对象 Car 进行排序后,您想按其他方式(如按价格、按重量)进行排序。当您想在不同时间以不同方式对对象进行排序时,如何做到这一点?我们在内部类中使用 Comparator 和 define 来做到这一点。*此外,Comparator 是一个功能接口,因为它是唯一要实现的抽象方法。您可以在一行代码中使用时髦的语法重写:例如:Compareator<Car> byPrice = (b1,b2) -> b1.price - b2.price;

互换的青春

这个机制已经在评论中得到了很好的解释。顺便说一句:自 Java 8 以来,这种匿名类的用法被认为有些过时,因为它可以用简单的 Lambda 表达式代替:tempRequests.sort((l,&nbsp;r)&nbsp;->&nbsp;l.compareTo(r));这适用于所有“功能接口”,它被定义为具有恰好一个非静态和非默认方法的接口。
随时随地看视频慕课网APP

相关分类

Java
我要回答