接口:
public interface Person { void eat(); }
测试类:
public class LambdaDemo { public static void main(String[] args) { /* * 三种方式实现接口: * * 1.新建一个实现类实现接口 * 2.匿名内部类实现接口 * 3.lambda表达式 * */ // 2.匿名内部类实现 useEat(new Person() { @Override public void eat() { System.out.println("吃"); } }); // 3.lambda表达式 /* * 写法和js的ES6中的箭头函数类似 * 这次写的是无参方法 * */ useEat(() -> { System.out.println("吃"); }); } // 定义一个方法,参数为这个接口的多态对象 public static void useEat(Person person){ // 调用接口中的方法 person.eat(); } }
接口:
public interface Person { void sing(String song); }
测试类:
public class Lambda { public static void main(String[] args) { // 匿名内部类 useSing(new Person() { @Override public void sing(String song) { System.out.println(song); } }); // lambda表达式 useSing((String s) -> { System.out.println(s); }); } // 定义一个方法 public static void useSing(Person person){ person.sing("天下"); } }
接口:
public interface Math { int add(int x,int y); }
测试类:
public class Lambda { public static void main(String[] args) { // lambda表达式 UseAdd((int x,int y) -> { return x + y ; }); } public static void UseAdd(Math m) { System.out.println(m.add(1, 2)); } }
接口:
public interface Person { String sing(String song1,String song2); }
测试类:
public class Lambda { public static void main(String[] args) { // 使用lambda实现 // 1.可以省略数据类型, // 但是多个参数时,只能全都省,或者全都不省 useSing((s1,s2) -> { return new String( new StringBuilder() .append(s1) .append(s2)); }); // 2.如果只有一个参数,()可以省略 // 3.代码块只有一条{}可以省略 // 4.在3的基础上如果有return需要省略return // 上述代码可以改成 useSing((s1,s2) -> new String(new StringBuilder().append(s1).append(s2))); } // 定义一个方法 public static void useSing(Person person){ // 调用接口中的方法 String sing = person.sing("歌曲1","歌曲2"); System.out.println(sing); } }