• 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("一边听歌");
    		}
    	}
    }
    

      

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

    而且不必写参数类型

  • 相关阅读:
    数学--数论--HDU 2136(素数筛选法)
    思维+模拟--POJ 1013 Counterfeit Dollar
    数学--数论--莫比乌斯函数
    事半功倍和事倍功半
    一道阿里面试题
    文本分类学习(三) 特征权重(TF/IDF)和特征提取
    汉字字典树
    文本分类学习(二)文本表示
    文本分类学习(一):开篇
    一道网易面试编程题
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11978075.html
Copyright © 2020-2023  润新知