前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot2.0响应式编程系列(二)-函数式编程和lambda表达式函数接口方法引用类型推断

SpringBoot2.0响应式编程系列(二)-函数式编程和lambda表达式函数接口方法引用类型推断

作者头像
JavaEdge
发布2018-06-12 15:45:29
1.4K0
发布2018-06-12 15:45:29
举报
文章被收录于专栏:JavaEdgeJavaEdge

函数接口

方法引用

代码语言:javascript
复制
package lambda;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.IntUnaryOperator;

class Dog {
   private String name = "哮天犬";

   /**
    * 默认10斤狗粮
    */
   private int food = 10;

   public Dog() {

   }

   /**
    * 带参数的构造函数
    * 
    * @param name
    */
   public Dog(String name) {
       this.name = name;
   }

   /**
    * 狗叫,静态方法
    * 
    * @param dog
    */
   public static void bark(Dog dog) {
       System.out.println(dog + "叫了");
   }

   /**
    * 吃狗粮 JDK
    * 
    * 默认会把当前实例传入到非静态方法,参数名为this,位置是第一个;
    * 
    * @param num
    * @return 还剩下多少斤
    */
   public int eat(int num) {
       System.out.println("吃了" + num + "斤狗粮");
       this.food -= num;
       return this.food;
   }

   @Override
   public String toString() {
       return this.name;
   }
}

/**
* @author shishusheng
*/
public class MethodRefrenceDemo {

   public static void main(String[] args) {
       Dog dog = new Dog();
       dog.eat(3);

       // 方法引用
       Consumer<String> consumer = System.out::println;
       consumer.accept("接受的数据");

       // 静态方法的方法引用
       Consumer<Dog> consumer2 = Dog::bark;
       consumer2.accept(dog);

       // 非静态方法,使用对象实例的方法引用
       // Function<Integer, Integer> function = dog::eat;
       // UnaryOperator<Integer> function = dog::eat;
       IntUnaryOperator function = dog::eat;
       
       // dog置空,不影响下面的函数执行,因为java 参数是传值
       dog = null;
       System.out.println("还剩下" + function.applyAsInt(2) + "斤");
       //
       // // 使用类名来方法引用
       // BiFunction<Dog, Integer, Integer> eatFunction = Dog::eat;
       // System.out.println("还剩下" + eatFunction.apply(dog, 2) + "斤");
       //
       // // 构造函数的方法引用
       // Supplier<Dog> supplier = Dog::new;
       // System.out.println("创建了新对象:" + supplier.get());
       //
       // // 带参数的构造函数的方法引用
       // Function<String, Dog> function2 = Dog::new;
       // System.out.println("创建了新对象:" + function2.apply("旺财"));

       // 测试java变量是传值还是穿引用
       List<String> list = new ArrayList<>();
       test(list);

       System.err.println(list);
   }

   private static void test(List<String> list) {
       list = null;
   }
}

类型推断

image.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.06.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数接口
  • 方法引用
  • 类型推断
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档