我正在通过一个例子,它从与方法引用相关的当前目录中提取一个隐藏文件数组,如下所述
java prettyprint-override"> File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
我的问题是FileFilter
接口只有一个抽象方法(boolean-accept(File-pathname)
),而实现accept-method-using-method-reference在文件
类中使用boolean-ishdden()
的有效性如何。我了解到,只有当参数与抽象方法匹配时,我们才能应用方法引用,但是这里accept
method有一个File
类型的参数,但是ishiden
没有参数。你能解释一下它的有效性吗。
见:https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
部分:方法引用的种类(对特定类型的任意对象的实例方法的引用)
这是Lambda表达式方法参考。关于accept方法,您提到的是Lambda表达式,关于File::ishiden
的是方法引用。
它们是两种不同的东西。
你的原版:
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
可以变成:(Lamda表情)
File[] hiddenFiles = new File(".").listFiles(file -> file.isHidden());
然后可以将其转换为:(方法参考)
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
主要内容:1 Java8 方法引用的介绍,2 Java8 方法引用的分类,3 Java8 方法引用:引用静态方法,4 Java8 方法引用:引用实例方法,5 Java8 方法引用:引用构造方法1 Java8 方法引用的介绍 Java提供了一个新功能,称为Java 8中的方法引用。方法引用用于引用功能接口的方法。它是lambda表达式的紧凑和简单形式。每次使用lambda表达式仅引用方法时,都可以将lambda表达式替换为方法引用。在本教程中,我们将详细解释方法参考概念。 2 Java8 方法引用
本文向大家介绍使用Java8中的方法引用来引用实例方法,包括了使用Java8中的方法引用来引用实例方法的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式使您可以将功能作为参数传递给方法。您也可以使用lambda表达式调用现有方法。 方法引用是简单,易于阅读的lambda表达式,可通过lambda表达式中的名称来调用/引用和现有方法。 语法 以下是在Java中引用实例方法的语法
Obj.TestPredicate(list,String::Contains); 我在“String::Contains”中得到错误:不能从静态上下文引用非静态方法。但contains不是静态方法。我被那些小费弄糊涂了。 我的代码如下: (2)如果func是一个实例方法,那么someClass::func是一个lambda,它使用第一个参数作为实例,正如您所想的:(a,b,c)->a.func(
本文向大家介绍java8新特性之方法引用示例代码,包括了java8新特性之方法引用示例代码的使用技巧和注意事项,需要的朋友参考一下 简介 方法引用是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器。方法引用与lambda表达式结合使用,可以进一步简化代码。 方法引用的使用场景 我们用Lambda表达式来实现匿名方法。但有些情况下,我们用Lambda表达式仅仅是调用一些已经存
本文向大家介绍使用Java8中的方法引用来引用构造函数,包括了使用Java8中的方法引用来引用构造函数的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式使您可以将功能作为参数传递给方法。您也可以使用lambda表达式调用现有方法。 方法引用是简单,易于阅读的lambda表达式,可通过lambda表达式来调用/引用以及现有方法的名称。除了实例和静态方法,您还可以使用new关键字
我正在和Java8一起做项目,发现了一个我无法理解的情况。 我有这样的代码: 这段代码运行良好,但我可以使用方法引用重写它: 而这段代码没有编译,在方法引用中给出了不兼容的抛出类型*SomeException*。 IDEA还向我提供了错误