• 83 lambda表达式


    当匿名内部类只有一个中有且只有一个抽象方法时,可以更加匿名内部类写法,编程lamada表达式。

    例如,有这样一个例子:

     先写一个接口,接口中只有一个抽象方法

    public interface AbstractLambda {
    	int sayHi( int a);
    }
    

      

    再写一个A类写一个方法doSome,方法形参为这个接口的一个引用,再写一个接口的实现类,实现类重写抽象方法,写一个测试类,new一个实现类的实例,new一个A类的实例a,通过a调用doSome方法,传入实现类的实例。

    public class Test {
    	public static void main(String[] args) {
    		A a = new A();
    		RealLambda r = new RealLambda();
    		a.doSome(r);	
    	}
    }
    
    class A{
    	public void doSome(AbstractLambda al) {
    		al.sayHi(4);
    } } class RealLambda implements AbstractLambda{ @Override public int sayHi(int a) { System.out.println("AbstractLambda的一个实现类重写的sayHi方法");
              return a; } }

      

    以上代码,在a.doSome(r)部分,由于r只使用一次,我们可以使用匿名内部类代替r,这样就不用写接口的实现类了,如下:

    public class Test {
    	public static void main(String[] args) {
    		A a = new A();
    		a.doSome(new AbstractLambda() {//改变的地方
    			@Override
    			public int sayHi(int a) {
    				System.out.println("匿名内部类中的重写抽象方法实现了运行了");
                        return 0; } }); } } class A{ public void doSome(AbstractLambda al) { System.out.println("传入lambda表达式的方法运行了"); } }

      

    接下来我们将a.doSome()使用lambda进一步精简:

    使用lambda的规则是:该抽象类有且仅有一个抽象方法。

    精简步骤是:

    1. 去掉方法参数列表以前的方法部分,只保留方法的参数列表(与括号,且参数名也要写,参数类型可以不写)
    2. 参数列表后面加“->{ }”,在大括号中填入语句,这些语句就代表这个抽象方法中的语句。
    3. 如果大括号中只写一句,可省略大括号,省略后要将这句的分号去掉,如有return,可省略return。
    4. 参数列表里不能穿实参啊那是形参声明 
    5. public class Test {
      	public static void main(String[] args) {
      		A a = new A();
      		//初始lambda形式
      		a.doSome((int b)->{
      			return 0;
      		});
      		//去掉参数类型,方法体中若只有一句,所以去掉大括号,去掉分号,去掉return。
      		a.doSome((b)-> 0);
      		
      	}
      }
      

        

      

  • 相关阅读:
    汉诺塔略写
    第六章实验报告
    第三次实验报告
    第五章 循环结构反思
    第二次实验报告
    第一次实验报告x
    第九章 结构体与共用体
    第八次实验报告
    第7章 数组实验
    第六章 函数和宏定义实验(2)
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12165391.html
Copyright © 2020-2023  润新知