`

java8 lambda和方法引用示例

    博客分类:
  • java
阅读更多
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);
    }

}
分享到:
评论

相关推荐

    Java的lambda表达式讲解代码(各种lambda表达式使用方式:无参、一个参数、多参数、简化形式...)

    4、函数式接口使用:学习如何使用Lambda表达式与Java中的函数式接口进行交互,包括传递函数、使用函数式接口的默认方法和方法引用。 本源码资源旨在帮助用户掌握以下几个方面: 1、Lambda表达式概述:了解Lambda...

    深入探索Java 8 Lambda表达式

    2014年3月,Java 8发布,Lambda表达式作为一项重要的特性随之而来。或许现在你已经在使用Lambda表达式来书写简洁灵活的代码。比如,你可以使用Lambda表达式和新增的流相关的API,完成如下的大量数据的查询处理:  ...

    JAVA8的新特性学习笔记

    该笔记主要记录了学习Java8新增特性的全部信息,包含概念讲解及代码示例,主要针对Lambda表达式、函数式接口、方法引用及构造器引用、Stream API、Optional类几个模块深入浅出的介绍了各个模块的使用。希望对大家的...

    Java 8 简明教程 (Java 8 Tutorial中文版)文字pdf版

    Java 8 简明教程 Java 8 Tutorial中文版 “Java并没有没落,人们很快就...达式,方法引用和重复注解。看完这篇教程后,你还将对最新推出的API有一定的 了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等。

    java8stream源码-java8:Java8示例

    java8流源码java8 Java 8 示例 对于 Java 编程,Java SE 8 提供了大量功能。 他们之中有一些是 Lambda 表达式- 为 Java 添加函数处理能力。 方法引用- 通过名称引用函数而不是直接调用它们。 使用函数作为参数。 ...

    java8stream源码-java-8-practice:Java8新特性实践

    java8流源码Java 8 新特性实践 Java 8 于 2014 年 3 月 18 日发布。它是 Java 软件开发平台的革命性版本。 它包括对 Java 编程、JVM、工具和库的各种升级。 Java 8 是 Java 历史上功能最丰富的版本之一。 Java 8 ...

    codenameone-lambda-sample:支持Lambda的示例代号示例项目

    这是一个简单的hello world应用程序,具有以下修改: build.xml和属性文件中对source 1.5和target 1.5所有引用已更改为1.8 。 它包含一个构建提示java.version=8 。 已对lib/CLDC11.jar文件进行了修补,以包括一些...

    Java8 简明教程.pdf

    示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解。看完这篇教程后, 你还将对最新推出的API有一定的了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等

    java8源码-jdk8:Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java

    接口:从jdk8开始,接口可以定义为函数式接口,并新增了两种类型的方法,【静态方法和默认方法】打破了接口以前的定义“实现这个接口就一定要实现接口中的所有方法”,具体请看示例。 Stream API:新添加的Stream ...

    Java8简明教程.pdf

    通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解。看完这篇教程后,你还将对最新推出的API有一定的 了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等...

    Java语言规范

    , 彻底覆盖Java SE 8的主要改进,包括lambda表达式、方法引用、缺省方法等。, 充分解决如何提升JAVA语言中最流行的特性之一——注解的效用。, 包含宝贵的见解,区分JAVA的正式规则和真实的编译器行为。, 对每一个...

    Java.In.A.Nutshell 7th Covers Java11.pdf

    Chock充满了演示如何充分利用现代Java API和开发最佳实践的示例,这本经过全面修订的书籍包含有关Java Concurrency Utilities的新资料。 本书的第一部分提供了Java编程语言和Java平台的核心运行时方面的快节奏,...

    java8源码-Java8Example:Java8的一些实用特性

    java8 源码 JAVA8实用范例 抛砖引玉!写出更简洁优美的代码 简介 自java5以来最大的版本变动 很大程度增强java类库 主要目标 更高的开发效率 更高代码可用性 更好的利用多核和多处理器系统 Lambda表达式 函数式接口:...

    modern-java.rar_JAVA 8简明教程_Java 8

    通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解。看完这篇教程后,你还将对最新推出的API有一定的了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等。

    java8stream源码-java8-tutorial:这个项目fork来自[java8-tutorial](https://github.

    在简短的代码示例的支持下,您将学习如何使用默认接口方法、lambda 表达式、方法引用和可重复注释。 在文章的最后,您将熟悉最新的变化,如流、功能接口、地图扩展和新的 Date API。 没有文字墙,只有一堆带注释的...

    java8源码-Java8NewSpecaility:Java8新特性之入门

    Java8用默认方法与静态方法这两个新概念扩展接口的声明 默认方法:允许在已有的接口中添加新方法,而同时又保持了与旧版本代码的兼容性。默认方法与抽象方法不同之 处在于抽象方法必须要求实现,但默认方法没有这样...

    现代 Java - Java 8 指南

    在简短的代码示例的支持下,您将学习如何使用默认接口方法、lambda 表达式、方法引用和可重复注释。在本文末尾,您将熟悉最新的API更改,例如流、功能接口、地图扩展和新的 Date API。没有文字墙,只有一堆带注释的...

    java8看不到源码-spring5-reactive:一个简单的Spring5React式示例

    java8 看不到源码spring5-reactive ...这是一个示例应用程序,用于构建响应式服务的服务器和客户端示例。 克隆存储库并运行主类。 构建并启动应用程序。 cd spring5-reactive mvn clean spring-boot:run

Global site tag (gtag.js) - Google Analytics