package com.lin.lambdatest;
/*
* 不带参的
*/
public class LambdaTest {
// 静态的成员内部类
static class Like2 implements Ilike {
@Override
public void like() {
System.out.println("I like java");
}
}
public static void main(String[] args) {
// 1)接口--->子实现类
// 接口多态
Ilike like = new Like();
like.like();
System.out.println("----------");
// 2)内部类
like =new Like2();
like.like();
System.out.println("----------");
// 3)提供匿名内部类-->还是内部类的一种,简化方式
like=new Ilike() {//接口的匿名内部类:本质:继承该类该类或者实现了该接口的子类对象
@Override
public void like() {
// TODO Auto-generated method stub
System.out.println("I Like lambda3");
}
};
like.like();
System.out.println("------------");
// JDK8提供了更简洁的操作,在匿名内部类基础优化
/*
* 将匿名内部类--->推出来
* 针对函数式接口提供的这个格式:
* 接口名 对象名=
* (空参)->方法体语句;
* 注意:如果该接口中的抽象方法是不带参数,小括号不能省略
* */
like=
()->{
System.out.println("i like lambda4");
};
like.like();
}
}
//要使用Lambda表达式,前提是存在接口一个函数式接口(接口中只有一个抽象方法)
@FunctionalInterface // 标记当前接口是一个函数式接口(只有一个抽象方法)
interface Ilike {
void like();
}
//定义一个子实现类
class Like implements Ilike {
@Override
public void like() {
// TODO Auto-generated method stub
System.out.println("I like Lambda");
}
}
带参数处理方法
package com.lin.lambdatest;
/*
* 函数式接口
* 一个抽象方法:
* 带参的,有具体返回值
* */
public class LambdaTest3 {
public static void main(String[] args) {
Love love=new Love() {
@Override
public String love(String name, int age) {
return name+age;
}
};
String result=love.love("myself", 21);
System.out.println(result);
System.out.println("----------");
/*
* 接口中如果带形式参数值,在使用lambda的时候
* 1)方法形式参数的数据类型要么都带上,要么都不带!
* 2)多个形式参数,()不能省略
* 如果只有一个形式参数()可以省略
* */
Love love2=
(String name,int age)->{
return name+age;
};
String ret= love2.love("k", 20);
System.out.println(ret);
}
}
interface Love {
String love(String name, int age);
}