函数式编程思想
在数学中 函数就是有输入量和输出量的一套计算方案 也就是“拿什么东西做什么事情”
相对而言 面向对象过分强调必须通过对象的形式来做事情
而函数式思想则尽量忽略面向对象的复杂语法——强调做什么 而不是以什么形式做
- 面向对象的思想:
做一件事情 找一个能解决这个事情的对象 调用对象的方法 完成事情 - 函数式编程思想:
只要能获取到结果 谁去做的 怎么做的都不重要,重视的是结果 不重视过程
可能不太好理解 我们举个简单的栗子:
代码冗余
public static void main(String[] args) {
RunnableImpl runnable=new RunnableImpl();
Thread thread=new Thread(runnable);
thread.start();
// 使用匿名内部类简化
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " - new");
}
};
new Thread(runnable1).start();
// 继续简化
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " - new");
}
}).start();
}
在这段多线程代码中:
1、Thread 类需要 Runnable 接口作为参数 因为其中的抽象 run 方法是用来指定线程任务内容的核心
2、为了指定 run 的方法体 不得不需要存在一个Runnable接口的实现类
3、为了省去定义一个RunnableImpl实现类的麻烦 不得不使用匿名内部类
4、因为必须覆盖重写抽象的run方法 所以方法名称 方法参数和方法返回值都不得不再写一遍 且不能写错
而实际上 只有方法体才是关键所在
因此 我们需要转换我们的编程思想
更加关注做什么 而不是怎么做
我们为了做这件事情而不得不创建一个匿名内部类对象
而我们真正希望做的事情是将 run 方法体内的代码传递给 Thread 类
传递一段代码——这才是真正的目的
更加简便:
在2014年3月Oracle所发布的Java 8(JDK 1.8)中 加入了Lambda表达式的重量级新特性 打开了新世界的大门
如下案例:
public static void main(String[] args) {
// 使用匿名内部类的方式实现多线程
new Thread(new Runnable(</