目录
          • 三、lambda表达式和匿名内部类的区别

                标准格式:

                三要素:形式参数 箭头 代码块
                格式:(形式参数)->{代码块}
                形式参数:如果多个参数用逗号隔开,无参留空
                ->:英文中划线和大于号组成
                代码块:具体要做的事

                使用前提:

                有一个接口
                接口中有且仅有一个抽象方法

                一、举例说明

                1、无参无返回

                1.1 定义一个接口

                public interface eatable {
                    void eat();
                }

                1.2接口实现类

                public class eatableimpl implements eatable{
                    @override
                    public void eat() {
                        system.out.println("一天一苹果");
                    }
                }

                1.3 测试类

                public class eatabledemo {
                    public static void main(string[] args) {
                        //主方法调用useeatable
                        eatable e = new eatableimpl();
                        useeatable(e);
                        //匿名内部类
                        useeatable(new eatable() {
                            @override
                            public void eat() {
                                system.out.println("一天一苹果");
                            }
                        });
                
                        //lambda表达式
                        useeatable(() -> {
                            system.out.println("一天一苹果");
                        });
                
                 
                
                    }
                
                    private static void useeatable(eatable e){
                        e.eat();
                    }
                }
                

                2、有参无返回代码示例

                public interface eatable {
                    void eat(string name);
                }
                
                public class eatdemo {
                    public static void main(string[] args) {
                        useeat((string name) -> {
                            system.out.println(name);
                            system.out.println("输出的啥");
                        });
                    }
                
                    private static void useeat(eatable e){
                        e.eat("苹果");
                    }
                
                }
                

                3、有参有返回

                public interface addable {
                    int add(int x,int y);
                }
                1.
                2.
                3.
                public class addabledemo {
                    public static void main(string[] args) {
                        useaddable( (int x,int y ) -> {
                            return x+y;
                        });
                    }
                
                    private static void useaddable(addable a){
                        int sum = a.add(5, 7);
                        system.out.println(sum);
                    }
                
                }
                

                二、简单事项

                1、省略模式

                • 参数的类型可省略,多个参数时候不可只省略一个;
                • 如果参数有且仅有一个可省略大括号和分号;
                • 如果代码块的语句只有一条,可省略大括号和分号(有return时return也省略掉)

                2、注意事项

                • 必须要有接口,接口中有且仅有一个抽象方法
                • 必须有上下文环境,才能推导出lambda对应的接口:局部变量的赋值、调用方法的参数

                三、lambda表达式和匿名内部类的区别

                1、所需类型不同:

                • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
                • lambda表达式:只能是接口

                2、使用限制不同:

                • 如果接口中有且仅有一个抽象类,两者都可以使用
                • 接口中多于一个抽象类,只能使用匿名内部类

                3、实现原理不同:

                • 匿名内部类:编译之后,产生一个单独的.class字节码文件
                • lambda表达式:编译之后,没有单独的.class字节码文件,对应的字节码会在运行时动态的生成

                到此这篇关于java中lambda表达式基础及使用的文章就介绍到这了,更多相关java中lambda表达式内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!