Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重写新变量声明中的方法_Java_Overriding_Function Declaration - Fatal编程技术网

Java 重写新变量声明中的方法

Java 重写新变量声明中的方法,java,overriding,function-declaration,Java,Overriding,Function Declaration,在处理一个项目时,我遇到了以下代码段,它似乎提供了代码,完全包含在一个新的变量声明中,似乎覆盖了一个方法。我以前见过这个表单的代码,但不可否认,我并不完全理解它。如果有人能解释这段代码所基于的编程机制,我将非常感激。特别是,当在变量声明中允许重写此类方法时。还有哪些类型的数据结构允许这种行为?什么时候编写这种性质的代码比较有利?为什么不在变量声明之外重写该方法 tempRequests.sort(new Comparator<Integer>() {

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

tempRequests.sort(new Comparator<Integer>() 
{           
    @Override

    public int compare(Integer integer1, Integer integer2) 
    {           
        return integer1.compareTo(integer2);        
    }


});
tempRequests.sort(新的比较器()
{           
@凌驾
公共整数比较(整数整数1、整数2)
{           
返回整数1.compareTo(整数2);
}
});

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

->可以按可比较的接口对对象进行排序。 例如:

 public class Car implements Comparable<Car> {
     private String name;
     @Override
     public int compareTo(Car b) {
     return name.compareTo(b.name);
      }
    }
公共级轿车{
私有字符串名称;
@凌驾
公共内部比较(b车){
返回name.compareTo(b.name);
}
}
->您还可以在内部类中使用Comparator而不重写compare方法

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;
      }
    }
公共类汽车实现比较器{
私有字符串名称;
私人双价;
@凌驾
公共int比较(b1车、b2车){
返回b1.price-b2.price;
}
}
什么时候编写这种性质的代码比较有利?为什么不在变量声明之外重写该方法

->想象一下,在使用“按名称对对象进行排序”后,您希望按其他方式(如按价格、按重量)进行排序。当您希望在不同时间以不同方式对对象进行排序时,如何执行此操作?我们在内部类中使用带有define的Comparator来实现这一点

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

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

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

->可以按可比较的接口对对象进行排序。 例如:

 public class Car implements Comparable<Car> {
     private String name;
     @Override
     public int compareTo(Car b) {
     return name.compareTo(b.name);
      }
    }
公共级轿车{
私有字符串名称;
@凌驾
公共内部比较(b车){
返回name.compareTo(b.name);
}
}
->您还可以在内部类中使用Comparator而不重写compare方法

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;
      }
    }
公共类汽车实现比较器{
私有字符串名称;
私人双价;
@凌驾
公共int比较(b1车、b2车){
返回b1.price-b2.price;
}
}
什么时候编写这种性质的代码比较有利?为什么不在变量声明之外重写该方法

->想象一下,在使用“按名称对对象进行排序”后,您希望按其他方式(如按价格、按重量)进行排序。当您希望在不同时间以不同方式对对象进行排序时,如何执行此操作?我们在内部类中使用带有define的Comparator来实现这一点

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

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

注释中对该机制进行了很好的解释。 旁白:自Java 8以来,匿名类的这种用法被认为有些过时,因为它可以被一个简单的Lambda表达式取代:

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

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

注释中对此机制进行了详细解释。 旁白:自Java 8以来,匿名类的这种用法被认为有些过时,因为它可以被一个简单的Lambda表达式取代:

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

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

这称为“匿名类”声明。不是创建单独的类,而是在方法参数区域内创建它。为了简单和紧凑,我想,但有时它会降低可读性,特别是当重写方法的数量很大时。比较器的可能副本是一个接口。当您尝试实例化接口/抽象类时,还应该实现抽象定义的方法。在本例中,方法compare().FYI相当于
tempRequests.sort(null)它是匿名类。在本例中,它用于重写Comparator类的方法。匿名类被用来代替创建子类,并且通常只需要使用一次,称为“匿名类”声明。不是创建单独的类,而是在方法参数区域内创建它。为了简单和紧凑,我想,但有时它会降低可读性,特别是当重写方法的数量很大时。比较器的可能副本是一个接口。当您尝试实例化接口/抽象类时,还应该实现抽象定义的方法。在本例中,方法compare().FYI相当于
tempRequests.sort(null)它是匿名类。在本例中,它用于重写Comparator类的方法。使用匿名类而不是创建子类,通常只需要使用一次,或者在本例中使用
Comparator.comparingDouble(Car::getPrice)
,或者在本例中使用
Comparator.comparingDouble(Car::getPrice)
“老式”?我一定不同意。比如说,一个人怎么写一个Swing鼠标监听器呢?我想说Swing本身是非常老式的。人们还在使用它吗?虽然一般来说Java桌面应用程序并不多