Java 8支持lambda表达式,我想知道我们是否可以用lambda表达式替换匿名类?
答案 0 :(得分:5)
根据Lambda表达式上的Oracle docs,它们与实现功能接口的匿名类相同(只有一种方法的接口)。
因此,如果您有一个方法,该方法接受一个具有函数接口作为其引用类型的参数,则可以在调用该方法时使用lambda表达式。例如: -
public boolean testString(Predicate<String> tester, String str);
调用doSomething
时,可以使用lambda表达式来减少编写比较器所需的代码量: -
boolean result = testString(s -> { /* implement Predicate.test */}, str);
当您想要将方法的核心功能留给调用者而不编写显式类/匿名类时。扩展上面的例子: -
boolean isStringPalindrome = testString(s -> { /* code to check if string is palindrome */}, "madam");
boolean doesStringContainVowels = testString(s -> { /* code to check if string contains vowels */}, "abc");