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

时间:2017-09-24 14:31:58

标签: java java-8

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

1 个答案:

答案 0 :(得分:5)

根据Lambda表达式上的Oracle docs,它们与实现功能接口的匿名类相同(只有一种方法的接口)。

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

public boolean testString(Predicate<String> tester, String str);

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

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

为什么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");