zoukankan      html  css  js  c++  java
  • Java8学习笔记(三)--方法引入

    POJO

    public class Emp {
        private int empno;
        private String ename;
        //其余方法略
    }

    方法的引入分为以下四种:

      1. 引入静态方法
    @FunctionalInterface
        public interface StaticMethod {
            int min(int a, int b);
        }
    
        StaticMethod staticMethod = (a, b) -> Math.min(a,b);
        StaticMethod staticMethod1 = Math::min;
      1. 引入某个对象的实例方法
    @FunctionalInterface
    public interface InstanceMethodOfParticularObject {
        void setEmpName(String name);
    }
    
        Emp emp = new Emp(1,"eName");
        
        //普通Lambda表达式
        InstanceMethodOfParticularObject instanceMethodOfParticularObject = name -> emp.setEname(name);
        instanceMethodOfParticularObject.setEmpName("haha");
        System.out.println(emp.getEname());
        
        //方法引入--引用某个对象的实例方法
        InstanceMethodOfParticularObject instanceMethodOfParticularObject1 = emp::setEname;
        instanceMethodOfParticularObject1.setEmpName("xixi");
        System.out.println(emp.getEname());
      1. 引用某个类型的任意对象的实例方法
    @FunctionalInterface
    public interface InstanceMethodOfArbitraryObject {
        boolean equale(String a,String b);
    }
    
        InstanceMethodOfArbitraryObject instanceMethodOfArbitraryObject = (a, b) –> a.equals(b);
        InstanceMethodOfArbitraryObject instanceMethodOfArbitraryObject1 = String::equals;
    
        System.out.println(instanceMethodOfArbitraryObject1.equale("a","b"));
        System.out.println(instanceMethodOfArbitraryObject.equale("a","a"));
      1. 引用构造方法
     
    @FunctionalInterface
    public interface ConstructorWithFullFields {
        Emp getNewEmp(int empno,String ename);
    }
    
        //无参构造
        ConstructorWithNoField<Emp> constructorWithNoField = ()-> new Emp();
        ConstructorWithNoField<Emp> constructorWithNoField1 = Emp::new;
    
        //全参构造
        ConstructorWithFullFields constructorWithFullFields = ((empno, ename) -> new Emp(empno,ename));
        ConstructorWithFullFields constructorWithFullFields1 = Emp::new;
    1. 一般情况下,用方法引入代替普通Lambda表达式均满足以下条件:

      1. 返回值类型相同

      2. 参数类型及个数相同

        比如第1/2/4种形式。

    2. 第3种形式比较特殊,需满足以下条件:

      1. 返回值类型相同

      2. 两个参数

      3. 类型相同

    岁月本长而忙者自促;天地本宽而卑者自隘;风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒.不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安
  • 相关阅读:
    NConsoler 介绍
    HOWTO:批量删除存储过程和表
    HOWTO:使ASP.NET网站Forms验证可以指定多个登录页面
    [架构模式实践]如何不让第三方服务/组件的故障阻碍开发和测试进度
    GDI+学习笔记
    脚印: SD2C 2009 参会小记(非技术篇)
    Expression Web使用问题,相关资源及今日阅读
    HOWTO:FirePHP乱码问题解决
    [ECSHOP挖寶]用戶注銷過程
    励志好文
  • 原文地址:https://www.cnblogs.com/vvning/p/7657487.html
Copyright © 2011-2022 走看看