使用lambda表达式创建一个匿名类?

Ada*_*Lee -2 java java-8

Java 8支持lambda表达式,我想知道我们是否可以用lambda表达式替换匿名类?

Shr*_*dhi 5

根据Lambda表达式的Oracle文档,它们与实现功能接口的匿名类相同(只有一个方法的接口).

因此,如果您有一个方法,该方法接受一个具有函数接口作为其引用类型的参数,则可以在调用该方法时使用lambda表达式.例:-

public boolean testString(Predicate<String> tester, String str);
Run Code Online (Sandbox Code Playgroud)

调用时testString,可以使用lambda表达式来减少编写比较器所需的代码量:

boolean result = testString(s -> { /* implement Predicate.test */}, str);
Run Code Online (Sandbox Code Playgroud)

为什么lambda表达式有用?

当您想要将方法的核心功能留给调用者而不编写显式类/匿名类时.扩展上面的例子: -

boolean isStringPalindrome = testString(s -> { /* code to check if string is palindrome */}, "madam");
boolean doesStringContainVowels = testString(s -> { /* code to check if string contains vowels */}, "abc");
Run Code Online (Sandbox Code Playgroud)