Lambda表达式

Lambda表达式的核心思想是  不用关注是什么对象,而是更关注我们对数据进行了什么操作

implements 是 Java 中的关键字,用于表示一个类实现了一个接口的所有方法。当一个类实现了一个接口,它需要提供该接口中定义的所有抽象方法的具体实现。

@FunctionalInterface
interface Calculator {
    int calculate(int a, int b);
}

public class Addition implements Calculator {
    @Override
    public int calculate(int a, int b) {
        return a + b;
    }
}

public class Multiplication implements Calculator {
    @Override
    public int calculate(int a, int b) {
        return a * b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator addition = new Addition();
        System.out.println("Sum: " + addition.calculate(5, 3));
        
        Calculator multiplication = new Multiplication();
        System.out.println("Product: " + multiplication.calculate(4, 2));
    }
}
@FunctionalInterface
interface MyFunctionalInterface {
    int performOperation(int a, int b);
}

public class Main {
    public static void main(String[] args) {
        MyFunctionalInterface addition = (a, b) -> a + b;
        System.out.println("Sum: " + addition.performOperation(5, 3));
        
        MyFunctionalInterface multiplication = (a, b) -> a * b;
        System.out.println("Product: " + multiplication.performOperation(4, 2));
    }
}



在这个示例中,MyFunctionalInterface 是一个函数式接口,它定义了一个抽象方法 performOperation。我们通过Lambda表达式分别创建了加法和乘法的实现,并通过调用 performOperation 方法来执行这些操作。

总之,函数式接口中的抽象方法是可以被实现类重写的,这是实现函数式编程特性的基本要求。




我们在创建线程并启动时可以使用匿名内部类的写法:
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("你知道吗 我比你想象的 更想在你身边");
    }
}).start();


可以使用Lambda的格式对其进行修改。修改后如下:
new Thread(()->{
    System.out.println("你知道吗 我比你想象的 更想在你身边");
}).start();

Lambda表达式在Java中是通过上下文中的目标类型(Target Typing)来进行类型推断的。在这个例子中,Lambda表达式是如何知道创建的是Runnable的实例呢?

在创建线程的构造函数中,传递了一个Lambda表达式作为参数,这个Lambda表达式的参数和返回类型必须与目标上下文的类型匹配。换句话说,Java 编译器会根据上下文推断出Lambda表达式的类型。

Thread 构造函数的参数类型要求是一个实现了 Runnable 接口的对象。这个构造函数允许将一个 Runnable 对象作为参数传递,以便在新的线程中执行 Runnable 对象的 run 方法。

具体来说,Thread 类有以下两个构造函数可以接受 Runnable 参数:

  1. Thread(Runnable target)

    • 用于创建一个新的线程,该线程将执行传递的 Runnable 对象的 run 方法。
  2. Thread(Runnable target, String name)

    • 除了接受 Runnable 参数外,还可以指定线程的名称。

所以,当提供一个 Lambda 表达式作为参数时,根据 Lambda 表达式的实际内容,编译器会自动推断出 Runnable 类型,以满足 Thread 构造函数对参数类型的要求。

省略规则

  • 参数类型可以省略

  • 方法体只有一句代码时大括号return和唯一一句代码的分号可以省略

  • 方法只有一个参数时小括号可以省略

  • 以上这些规则都记不住也可以省略不记

还有一句话  括号中记录的是接口中方法的参数,代码块中是方法体内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值