29 匿名内部类、函数型接口、lamda表达式的引入

匿名内部类

参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html

进入后搜索匿名内部类。

函数型接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

例如,我们常用的Runnable接口,翻看源码发现,它只有一个抽象方法run,它就是一个函数型接口。

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

  参考:https://www.runoob.com/java/java8-functional-interfaces.html

匿名内部类与函数型接口简化一个线程案例:

简化前:

package _20191203;
/**
 * 创建线程的方法一:继承Thread
 * @author UID
 *
 */
public class ThreadTest{ 
	public static void main(String[] args) {
		new Thread(new ThreadRun()).start();//主要看这里
		for(int i = 0;i < 200;i++) {
			System.out.println("一边听歌");
		}
	}
	
}

class ThreadRun implements Runnable{
	@Override
	public void run() { //必需重写run方法
		for(int i = 0;i < 200;i++) {
			System.out.println("一边敲代码");
		}
	}
}

  

简化后:

package _20191203;
/**
 * 创建线程的方法一:继承Thread
 * @author UID
 *
 */
public class ThreadTest{ 
	public static void main(String[] args) {
		new Thread(new Runnable(){ //主要看这里
			@Override
			public void run() {
				for(int i = 0;i < 200;i++) {
					System.out.println("一边敲代码");
				}
			}
		}).start();
		for(int i = 0;i < 200;i++) {
			System.out.println("一边听歌");
		}
	}
}

 

引入lamda表达式 

emm...不好讲啊。

上面的代码还可以使用lamda表达式进一步简化。

lamada时jdk 8 的新特性,它不是java独创的,实际上它来源自scale社区,并且被越来越多的程序中使用,它可以大大简化代码。

参考:https://baike.baidu.com/item/Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/4585794?fr=aladdin

lamda表达式的使用方法参考:https://www.cnblogs.com/coprince/p/8692972.html

可以使用lamda表达式的接口就是函数型接口,在上面的案例中,Runnable接口就是一个函数型接口,所以这里我们可以使用lamda表示式对上面的例子进行简化:

public class ThreadTest{ 
	public static void main(String[] args) {
		//new Thread(new ThreadRun()).start();
		new Thread(()->{   //主要看这里 lamda表达式
			for(int i = 0;i < 200;i++) {
                System.out.println("一边敲代码");
            } 
		}).start();
		for(int i = 0;i < 200;i++) {
			System.out.println("一边听歌");
		}
	}
}

  

当抽象方法有参数时,对应写成的(参数)->{代码}

而且不必写参数类型

原文地址:https://www.cnblogs.com/Scorpicat/p/11978075.html