一些lambda和匿名内部类

javaSE

lambda相关

lambda表达式是jdk1.8以后提供的新的语法规则。

lambda表达式体现的是另外一种编程思想: 函数式编程思想

函数:在数学中函数表示的是有输入量,输出量的一种计算方案,强调的是做什么。

java语言是面向对象的语言,面向对象的语言关注点是对象,谁可以帮助我做事情。

lambda基本格式: () -> {}
(参数类型 参数名) -> {方法体}

lambda使用时,必须要有一个接口,且接口中只能有一个抽象方法(函数接口),必须要有上下文环境。

lambda基本格式:
(参数类型 参数名) -> {方法体}
参数类型和个数需要和需要实现的接口,保持一致
需要几个传几个,需要什么类型就传什么类型

//无参无返回值
    public interface Inter1{
    void eat();
}
    public class Test1{
          public static void main(String[] args){
                     toEat( () -> {
                     System.out.println("去吃火锅");
                });
          }
          public static void toEat(Inter1 inter){
                  inter.eat();    
          } 
    }
        lambda支持省略
               1. 参数类型可以省略,但是有多个参数的情况下,不能只省略一个
               2. 如果参数有且仅有一个,那么小括号可以省略
               3. 如果代码块的语句只有一条,可以省略大括号,分号和return
//带参数有返回值
    public interface Calculator {
    int calc(int a,int b);
}
   public class CalculatorDemo {
    public static void main(String[] args) {
        
        int cal = useCalculator( (a,b) -> 
             a + b
        );
        System.out.println(cal);

    }
    public static int useCalculator(Calculator c){
        int calc = c.calc(25,68);
        return calc;
    }
}

lambda和匿名内部类的区别

使用前提:

  • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
  • Lambda表达式:只能是接口,接口中只能有一个抽象方法

运行原理:

  • 匿名内部类:编译之后,产生一个单独的.class字节码文件
  • Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成。

lambda和匿名内部类共同点是当一个方法需要传的参数类型为一个接口时,不需要单独去建一个实现类,节省空间

拓展—匿名内部类
匿名内部类是一种特殊的内部类,必须要先定义一个类或者接口,它的本质是实现某一个接口或者继承某一个类的子类对象,通常在一个方法需要传递父类对象或者接口类型的参数时,把匿名内部类作为方法的参数进行传递

    定义格式:
        new 类名/接口名() {   
        // 重写方法  
};
      public interface Inter {
    
    public abstract void show() ;
}

     new Inter() {		// 本质上是一个实现了Inter这个接口的子类对象
   public void show() {
       System.out.println("Inter...show......") ;
   }
};
	public class Student {
    public void show() {
    	 System.out.println("Student...show......") ;
    }
}

    new Student() {  // 本质上是一个继承了Student这个类的子类对象
    public void show() {
    	 System.out.println("Student...show......") ;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值