广告
返回顶部
首页 > 资讯 > 精选 >JavaEE匿名内部类和Lambda表达式的注意事项有哪些
  • 840
分享到

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

2023-07-05 16:07:19 840人浏览 薄情痞子
摘要

本文小编为大家详细介绍“JavaEE匿名内部类和Lambda表达式的注意事项有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaEE匿名内部类和Lambda表达式的注意事项有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入

本文小编为大家详细介绍“JavaEE匿名内部类和Lambda表达式的注意事项有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaEE匿名内部类和Lambda表达式的注意事项有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、匿名内部类

定义在方法中(方法的形参或者实参),没有任何权限修饰符,甚至连类名称都没有的内部类称为匿名内部类

public class NoNameClass {    public static void main(String[] args) {        Queue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {            @Override            public int compare(Integer o1, Integer o2) {                return 0;            }        });        fun(new IMessage() {            @Override            public void getMsg(String msg) {            }        });    }    public static void fun(IMessage message) {        message.getMsg("测试匿名内部类");    }}interface IMessage {    void getMsg(String msg);}

注意事项:

匿名内部类也是方法内部类中的一种,最多用在方法形参中。接口无法直接实例化对象的,因此我们此处的new的是IMessage接口的子类,只不过这个子类只在fun方法中使用一次

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

这个小括号里面的其实就是匿名内部类,实现了Comparator接口,覆写了compare方法

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

二、Lambda表达式

1.背景

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda 表达式(Lambda expression)可以看作是一个匿名函数,基于数学中的&lambda;演算得名,也可称为闭包(Closure) 。

2.函数式接口

要了解Lambda表达式,首先需要了解什么是函数式接口,函数式接口定义:一个接口有且只有一个抽象方法

@FunctionalInterface// jdk8之后再接口中拓展了普通方法(存在方法体,普通方法,不是抽象方法,该接口的所有子类都有)public interface NewInterface {    // test仍然是一个抽象方法,没有方法体    void test();    default void test1() {        System.out.println("接口中的普通方法");    }}class InterFaceImpl implements NewInterface {    @Override    public void test() {    }}class Main {    public static void main(String[] args) {        InterFaceImpl a = new InterFaceImpl();        a.test1();    }}

注意

如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口。

如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。

接口中有普通方法但只有一个抽象方法也是可以满足函数式接口定义的。

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

3.Lambda表达式的语法

能使用Lambda表达式的前提就是接口必须是函数式接口,只有唯一的一个抽象方法。

@FunctionalInterfaceinterface FuncInterface {    void test();}public class LambdaTest {    public static void main(String[] args) {        // 匿名内部类        fun(new FuncInterface() {            @Override            public void test() {                System.out.println("匿名内部类实现了FuncInterface接口");            }        });        fun(() -> {            System.out.println("Lambda表达式实现了FuncInterface接口");        });    }    public static void fun(FuncInterface fi) {        fi.test();    }}

基本语法:
(parameters) -> expression(parameters) ->{ statements; }

Lambda表达式由三部分组成:

  1. paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。

  2. ->:可理解为“被用于”的意思。

  3. 方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

所以Lambda表达式就是一个匿名函数,可以当做实参传入方法中。当方法声明中有形参要求传入一个实现某个接口的子类时,就可以使用匿名内部类,若此接口符合函数式接口,则可改写成Lambda表达式。

4.Lambda表达式的基本使用

Lambda表达式有四种情况,对应抽象方法的四种分支。

定义以下四种接口:

interface HasParaHasReturn {    int test(int a,int b);}interface NoParaHasReturn {    int test();}interface HasParaNoReturn {    void test(int a);}interface NoParaNoReturn {    void test();}
(1)无返回值无参数

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

规则1:若方法体只有一行代码,则可以省略{}

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

(2)无返回值有参数

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

规则2:若方法的参数只有一个,可以省略小括号

规则3:可以省略Lambda表达式中的参数类型

(3)有返回值无参数

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

规则4:若抽象方法存在返回值并且返回的方法体只有一行,此时方法体的大括号,return都可以省略。

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

(4)有返回值有参数

JavaEE匿名内部类和Lambda表达式的注意事项有哪些

读到这里,这篇“JavaEE匿名内部类和Lambda表达式的注意事项有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: JavaEE匿名内部类和Lambda表达式的注意事项有哪些

本文链接: https://www.lsjlt.com/news/353336.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaEE匿名内部类和Lambda表达式的注意事项有哪些
    本文小编为大家详细介绍“JavaEE匿名内部类和Lambda表达式的注意事项有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaEE匿名内部类和Lambda表达式的注意事项有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-07-05
  • 关于JavaEE匿名内部类和Lambda表达式的注意事项
    目录前言一、匿名内部类注意事项:二、Lambda表达式1.背景2.函数式接口3.Lambda表达式的语法4.Lambda表达式的基本使用(1)无返回值无参数(2)无返回值有参数(3)...
    99+
    2023-03-24
    java匿名内部类 java lambda 内部类注意事项
  • JavaEE内部类的注意事项有哪些
    本篇内容主要讲解“JavaEE内部类的注意事项有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaEE内部类的注意事项有哪些”吧!前言内部类的设计也是一种封装的思想,封装体现的就是保护性...
    99+
    2023-07-05
  • java成员内部类的注意事项有哪些
    1. 成员内部类不能有静态成员(静态字段、静态方法),除非静态成员是final和static的常量。2. 成员内部类可以访问外部类的...
    99+
    2023-09-26
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作