Java_内部类、匿名内部类、Lambda表达、方法引用(双冒号)

直接上代码,解释在注释里:

    // 目标:熟悉内部类、匿名内部类、Lambda 表达式、 方法引用的用法 与 关系
    // 实例目的: 使用 Creator 生产 ProductionA (不在乎具体的生成商,只要产品就行)

package com.example.javalearnproject.lambda;

import org.junit.Test;

public class LambdaTest {
    // 目标:熟悉内部类、匿名内部类、Lambda 表达式、 方法引用的用法 与 关系
    // 实例目的: 使用 Creator 生产 ProductionA (不在乎具体的生成商,只要产品就行)
    @Test
    public void test() {
        //{1.Creator 完整内部类
        RealCreatorA realCreatorA = new RealCreatorA();
        Production production1 = realCreatorA.create("特斯拉", "内部类实现创建", 1);
        System.out.println(production1);
        //1.Creator完整的内部类}

        //{2.Creator 内部匿名类 - 省去具体实现的接口名
        Production production2 = new Creator() {
            @Override
            public Production create(String name, String description, int version) {
                return new RealProductionA(name, description,version);
            }
        }.create("特斯拉", "内部匿名类实现创建", 1);
        System.out.println(production2);
        //2.Creator 内部匿名类}

        //{3 Creator 内部匿名类:使用Lambda 表达式简化 - 省去接口名和实现的方法名
        Production production3 = ((Creator) (name, description, version) -> new RealProductionA(name, description, version))
                .create("特斯拉", "内部匿名类:使用Lambda  表达式简化", 1);
        System.out.println(production3);
        //3 Creator 内部匿名类:使用Lambda  表达式简化}

        //{4 Creator 内部匿名类:使用 方法引用(双冒号::)  表达式简化 - 省去形参
        Production production4 = ((Creator) RealProductionA::new)
                .create("特斯拉", "内部匿名类:使用 方法引用(双冒号::)  表达式简化", 1);
        System.out.println(production4);
        //4 Creator 内部匿名类:使用 方法引用(双冒号::)  表达式简化}
    }


    //{Common codes ****************************************************************************
    //{创建产品的接口
    interface Creator {
        Production create(String name, String description, int version);
    }
    //创建产品的接口}

    //{抽象产品
    abstract class Production {
        private String mName;
        private String mDescription;
        private int mVersion;

        public Production(String name, String description, int version) {
            this.mName = name;
            this.mDescription = description;
            this.mVersion = version;
        }

        @Override
        public String toString() {
            return "Production{" +
                    "mName='" + mName + '\'' +
                    ", mDescription='" + mDescription + '\'' +
                    ", mVersion=" + mVersion +
                    '}';
        }
    }
    //抽象产品}

    //{具体产品A
    class RealProductionA extends Production {

        public RealProductionA(String name, String description, int version) {
            super(name, description, version);
        }
    }
    //具体产品A}
    //Common codes ****************************************************************************}

    //{具体生产者A:内部类实现
    private class RealCreatorA implements Creator {

        @Override
        public Production create(String name, String description, int version) {
            return new RealProductionA(name, description, version);
        }
    }
    //具体生产者A:内部类实现}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值