首页 > 编程语言 >Java 匿名函数的概念和写法

Java 匿名函数的概念和写法

时间:2023-11-02 13:11:26浏览次数:45  
标签:Java 函数 void 接口 匿名 param 写法

匿名函数的实现
1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口

//1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口
interface ILike {
    void hit(long param);
}

没有类名,必须借助接口或父类
通过实例化函数式接口就可以完成匿名内部类实现此接口并重写方法

interface ILike {
    void hit(long param);
}

@Test
void testAnonymous() throws Exception {

    //匿名内部类,没有类名称,必须借助接口
    ILike like = new ILike() {
        @Override
        public void hit(long param) {
            System.out.println("i like anonymous => " + param);
        }
    };

    for (int i = 0; i < 10; i++) {
        like.hit(System.currentTimeMillis());
        Thread.sleep(1000);
    }
}

用 Lambda 简化匿名内部类的写法
匿名内部类是为了省去类名的写法
Lambda 简化写法不但可以省去类名,还可以省去接口名和函数名。因为只有一个抽象方法,可以直接实现并指向这个抽象方法和方法体

//1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口
interface ILike {
    void hit(long param);
} 

@Test
void testLambda() throws Exception {

    // 用lambda简化,因为接口中只有一个函数,所以可以直接省略实例化的接口名和函数名
    ILike like = (param) -> {
        System.out.println("i like lambda => " + param);
    };

    for (int i = 0; i < 10; i++) {
        like.hit(System.currentTimeMillis());
        Thread.sleep(1000);
    }
}
interface PrintInfo {
    void print(String data);
}

static void printJob(PrintInfo printInfo, String data) {
    printInfo.print(data);
}

@Test
void testLambda2() {
    printJob(new PrintInfo() {
        @Override
        public void print(String statement) {
            System.out.println("We're learning " + statement);
        }
    }, "Lambda");
}
interface PrintInfo {
    void print(String data);
}

static void printJob(PrintInfo printInfo, String data) {
    printInfo.print(data);
}

@Test
void testLambda2() {
    printJob(statement -> System.out.println("We're learning " + statement), "Lambda");
}

结论

  • 匿名函数写法和匿名类写法的前提必须基于函数式接口
  • 匿名函数写法和匿名类写法其本质是同一个东西,只是简化写法不同
  • 使用Lambda表达式简写匿名函数时,可以同时省略实现类名、函数名。除此外也可以使用传统写法

源码:https://gitee.com/VipSoft/VipBoot/blob/develop/vipsoft-demo/src/test/java/com/vipsoft/demo/AnonymousFunction.java

标签:Java,函数,void,接口,匿名,param,写法
From: https://www.cnblogs.com/vipsoft/p/17800720.html

相关文章

  • Java语言基础知识点梳理与总结
    Java语言基础知识点梳理与总结Java是一种广泛应用于软件开发的编程语言,具有丰富的特性和功能。在学习Java语言时,了解以下基础知识点对于建立坚实的编程基础非常重要。本博客将介绍Java语言中的标识符、运算符、流程控制、循环结构、分支结构、数组、方法、类与对象等主要知识点。......
  • Java踩坑之List的removeAll方法
    最近写个功能,需要用到差集,然后就想到了javaList中有一个removeAll方法,正好可以实现差集功能,可以直接调用。我们知道,apache的common-collections包下面得CollectionUtils.subtract()方法也可以对List作差集,为了比较两种方式差集的结果,见Java中CollectionUtils.subtract()......
  • javamail发送附件DataSource使用文件流解决方案
    问题:在使用james邮件服务器发送邮件时,附件是存储在华为云服务器上的,只能通过ApacheHttpClient去下载,存储在FTP上的文件同样会碰到这个问题。API上邮件添加附件的方法:/*************1.本地文件*************///将本地文件作为附件DataSourcedataSource=newFileDataSourc......
  • JavaScript中大于Math.pow(2, 53)的数,如何进行进制转换?精度问题,超过18位的数字如何进
    console.log('JavaScript中大于Math.pow(2,53)的数,如何进行进制转换?')//示例console.group('示例')console.log('使用bignumber.js库完美解决。[https://github.com/MikeMcl/bignumber.js/]')console.log('示例:18446744071545290752转为二进制')console.log......
  • Ajax + java Servlet 制作Web进度条
     运行效果图  index2.jsp <%@pagelanguage="java"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><scripttype="text/javascript"langua......
  • JavaScript操作checkbox的方式
    JavaScript操作checkbox的方式和操作radio的方式相似,都是利用元素项的checked属性来完成。先获取checkbox元素集合,遍历集合,对集合中的每一项做操作。 <body> <p> <labelfor="hobby">Hobby: <inputtype="checkbox"name="hobby"value="reading"/>rea......
  • JavaScript 保存文件
       <scriptsrc="http://cdn.jsdelivr.net/g/filesaver.js"></script><script>functionSaveAsFile(t,f,m){try{varb=newBlob([t],{type:m});saveAs(b,f);}catch(......
  • java字符串多行写法
    有一个很长的字符串,想分成多行书写,主要为了美观。 VB代码中可以将一个很长的字符串分成多行书写,例如:Stringstr="adfasdfasdfas\asdfasdfasdfasdf\asdfasdf" Java没有相似的处理方式。 变通处理方式:Strings="Itwasthebestoftimes,it......
  • JAVA语言基础
    Java是一种高级编程语言,最初由SunMicrosystems(后被Oracle收购)于1995年发布。它被广泛用于开发各种类型的应用程序,从桌面应用程序到移动应用程序和大型企业级应用程序。以下是Java语言的一些基础知识:1.跨平台性:Java以"WriteOnce,RunAnywhere"(一次编写,到处运行)为特点。这是因为......
  • javap - 查阅 Java 字节码
    javap命令可以用来查阅字节码文件,可以将指定的字节码文件反编译,反解析出当前类对应基本信息、常量池(Constantpool)、字段区域、方法区(Code[JVM指令集])、异常表(Exceptiontable)、本地变量表(LocalVariableTable)、行数表(LineNumberTable)和字节码操作数栈的映射表(StackMapTable)等信息......