避免匿名内部类定义过多
是函数式编程的概念

  1. package com.kai.lesson2;
  2. //推导lambda表达式
  3. public class TestLambda1 {
  4. //3.静态内部类
  5. static class Like2 implements ILike{
  6. @Override
  7. public void lambda() {
  8. System.out.println("i like lambda2");
  9. }
  10. }
  11. public static void main(String[] args) {
  12. ILike like=new Like();
  13. like.lambda();
  14. like=new Like2();
  15. like.lambda();
  16. //4.局部内部类
  17. class Like3 implements ILike{
  18. @Override
  19. public void lambda() {
  20. System.out.println("i like lambda3");
  21. }
  22. }
  23. like=new Like3();
  24. like.lambda();
  25. //5.匿名内部类,没有类的名称,必须借助接口或者父类
  26. like=new Like(){
  27. @Override
  28. public void lambda() {
  29. System.out.println("i like lambda4");
  30. }
  31. };
  32. like.lambda();
  33. //6.用lambda简化
  34. like = () ->{
  35. System.out.println("i like lambda5");
  36. };
  37. like.lambda();
  38. }
  39. }
  40. //1.定义一个函数式接口
  41. interface ILike{
  42. void lambda();
  43. }
  44. //2.实现类
  45. class Like implements ILike{
  46. @Override
  47. public void lambda() {
  48. System.out.println("i like lambda");
  49. }
  50. }

例子

  1. package com.kai.lesson2;
  2. public class TestLambda2 {
  3. static class Love2 implements ILove{
  4. @Override
  5. public void love(int a) {
  6. System.out.println("I Lobe U"+a);
  7. }
  8. }
  9. public static void main(String[] args) {
  10. ILove love= new Love();
  11. love.love(1);
  12. love=new Love2();
  13. love.love(2);
  14. class Love3 implements ILove{
  15. @Override
  16. public void love(int a) {
  17. System.out.println("I Lobe U"+a);
  18. }
  19. }
  20. love=new Love3();
  21. love.love(3);
  22. love=new Love(){
  23. @Override
  24. public void love(int a) {
  25. super.love(a);
  26. }
  27. };
  28. love.love(4);
  29. love=(int a)->{
  30. System.out.println("I Lobe U"+a);
  31. };
  32. love.love(5);
  33. //简化
  34. love=a->{
  35. System.out.println("I Lobe U"+a);
  36. };
  37. love.love(6);
  38. }
  39. }
  40. interface ILove{
  41. void love(int a);
  42. }
  43. class Love implements ILove{
  44. @Override
  45. public void love(int a) {
  46. System.out.println("I Lobe U"+a);
  47. }
  48. }
  1. lambda表达式只能有一行代码的情况下才能简化为1行,否则要用{}包裹
  2. 必须是函数式接口
  3. 多个参数也可以去掉参数类型,要去掉都去掉