public class Test {
protected interface FunctionEx {
void execute(String a);
default void defaultMethod() {
System.out.println("FunctionEx default executed!");
}
}
public String saySomething(String a) {
System.out.println("say :" + a);
// 当前FunctionEx.execute返回void,saySomething有返回值不影响方法引用,
// 当FunctionEx.execute有返回值,则saySomething返回值类型必须与之相同,
// 否则不能引用
return "";
}
public void doTest(String a, FunctionEx functionEx) {
System.out.print("doTest ");
functionEx.execute(a);
}
public void doTest2(String a) {
doTest(a, this::saySomething);
doTest(a, n -> this.saySomething(n)); // 此处this可省略
doTest(a, n -> saySomething(n));
doTest(a, new FunctionEx() {
@Override
public void execute(String a) {
// this.saySomething(a);
// 匿名内部类的this指向匿名内部类,所以此处不能用this.saySomething
// lambda的this指针指向的是包围lambda表达式的类
saySomething(a);
}
});
}
public static void main(String[] args) {
String str = "hello";
Test test = new Test();
test.doTest(str, n -> test.saySomething(n));
test.doTest(str, test::saySomething); // 方法引用的方式可以简化lambda表达式的写法
// 可使用方法引用的前提:lambda的主体仅包含一个表达式,且该表达式仅调用了一个已经存在的方法。
test.doTest(str, n -> {
test.saySomething(n);
// defaultMethod(); // lambda表达式不能调用接口中的默认方法
});
test.doTest(str, new FunctionEx() {
@Override
public void execute(String a) {
test.saySomething(a);
defaultMethod();// 匿名类实现的抽象方法允许调用接口中的默认方法
}
});
System.out.println("doTest2 start");
test.doTest2(str);
}
}
分享到:
相关推荐
Lambda表达式可以与方法引用和构造器引用结合使用,进一步简化代码。例如,`Arrays.sort(arr, Integer::compareTo)`,这里的`Integer::compareTo`是一个方法引用,等同于`(a, b) -> a.compareTo(b)`。 6. **默认...
Java 8还引入了方法引用来进一步简化代码。对于静态方法,我们可以直接使用类名::静态方法;对于非静态方法,我们可以使用实例::方法。比如,使用Collections的binarySearch()方法: ```java int index = ...
在描述中提到的"java 8 lambda demo"很可能包含了使用Lambda表达式的示例代码。这些示例可能涉及到以下场景: 1. **Stream API**:Lambda与Java 8的Stream API结合使用,可以进行高效的数据处理。例如,过滤、映射...
在Java 8中,匿名内部类、Lambda表达式和方法引用是重要的新特性,它们极大地简化了代码,提升了代码的可读性和效率。下面将详细探讨这三个知识点,并结合提供的测试用例进行分析。 1. **匿名内部类**: 匿名内部类...
Java 8 的 Lambda 表达式是 Java 编程语言的重大革新,它引入了一种新的函数式编程...通过深入学习这份文档,你可以更好地理解和掌握 Java 8 的 Lambda 表达式,从而提升你的 Java 编程技巧,写出更优雅、高效的代码。
此外,Java 8还引入了方法引用来替代Lambda表达式,当函数体与某个已存在的方法签名完全匹配时,我们可以直接引用该方法,简化代码。例如: ```java Collections.sort(people, Comparator.comparing(Person::getAge...
在描述中提到的代码示例中,对比了使用匿名类和Lambda表达式实现相同功能的方法。 首先,让我们看看匿名类的使用。在传统的Java编程中,如果需要一个简单的接口实现,我们通常会创建一个新的类来实现这个接口,如`...
总的来说,Java8 Lambda表达式结合模板方法,使得我们可以灵活地定义和使用函数式接口,实现代码的模块化和可扩展性。同时,通过Java的注解机制,可以为Lambda表达式和函数式接口提供更多的元信息,如编译时检查、...
在本文中,我们将详细介绍如何使用Java 8 Lambda表达式将实体映射到DTO,并提供一些相关的知识点和示例代码。 什么是Lambda表达式? Lambda表达式是一种匿名函数,可以作为函数式接口的实例化对象传递给方法或返回...
Java 8 的 Lambda 表达式是 Java 语言的一个重大更新,它引入了一种...通过学习和实践 `TestJava8` 文件中的示例,你可以深入理解 Java 8 Lambda 表达式的使用方式,并将其应用于实际开发中,提升代码的可读性和效率。
Lambda表达式还可以和方法引用来配合,例如,我们可以通过以下方式直接引用`String::length`方法: ```java List<String> list = Arrays.asList("one", "two", "three"); list.sort((a, b) -> a.length() - b....
此外,Java 8还引入了方法引用来替代Lambda表达式,当函数体与已有的方法签名匹配时,可以直接引用方法,如`System.out::println`。 综上所述,Java 8的Lambda表达式和函数式接口不仅提升了代码的简洁性和可读性,...
这个名为 "java8-lambda-samples" 的项目是为了配合一场关于 Java 8 lambda 表达式的闪电演讲而创建的,包含了示例代码,帮助开发者理解和学习这一新特性。 首先,我们需要理解 lambda 表达式的基本概念。Lambda ...
除了Lambda表达式,Java8还引入了方法引用和构造器引用,它们可以直接引用已有方法或构造器,进一步简化代码。例如: ```java Function, Integer> lengthExtractor = String::length; Integer length = ...
Java8 是一个重要的Java语言版本,它引入了许多创新特性,其中最引人注目的就是流(Stream)API和Lambda表达式。这两个特性极大地提升了Java在处理集合数据时的效率和可读性,使得代码更加简洁、高效。在这个“Java8...
下面,我们将深入探讨Lambda表达式的使用和其在Java 8中的应用。 1. **什么是Lambda表达式** Lambda表达式是一种简化的函数定义方式,它可以被视为没有名字的函数,通常用于实现接口的一个方法。在Java中,如果一...
3. **方法引用**:除了lambda表达式,Java 8还提供了方法引用,可以直接引用类的静态方法或实例方法,进一步简化代码。 4. **Stream API**:Stream API是Java 8的另一大亮点,它提供了一种处理集合数据的新方式。...
4、函数式接口使用:学习如何使用Lambda表达式与Java中的函数式接口进行交互,包括传递函数、使用函数式接口的默认方法和方法引用。 本源码资源旨在帮助用户掌握以下几个方面: 1、Lambda表达式概述:了解Lambda...
2. **方法引用来增强功能**:除了lambda,Java 8还引入了方法引用,它允许直接引用已有方法,而不需要在lambda表达式中重复方法体。例如,`Arrays::sort`可以直接用于排序操作。 3. **流(Stream)API**:Java 8的...
在Java 8中,方法成为了一等公民,意味着它们可以像其他值一样被传递和作为返回值。这得益于方法类型化,即方法可以被当作实现了特定接口的实例。例如,`LambdaMap::oneStringArgumentMethod`实际上隐式地实现了`...