方法引用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iuie_sl/article/details/55806442

方法引用

方法引用就是直接访问类中的实例或者构造器或者方法,他提供了一种调用方法而不直接执行的方式,方法引用是Lambda表达式的简写,在不需要使用Lambda表达式的时候一帮不需要使用方法引用。==当Lambda表达式中只是执行一个方法调用时,不用Lambda表达式,直接通过方法引用的形式可读性更高一些。==

方法引用分的分类

  • 静态方法引用
  • 实例方法引用
  • 构造方法引用
静态方法引用实例
//没有实现的接口
public interface StringFunc {

    String func(String n);
}


//string倒转的方法
public class MyStringOps {

    //静态方法: 反转字符串
    public static String strReverse(String str) {
        String result = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            result += str.charAt(i);
        }
        return result;
    }
}

//使用
public class MethodRefDemo1 {

    public static String stringOp(StringFunc sf, String s) {
        return sf.func(s);
    }
   public static void main(String[] args) {
       String inStr = "lambda add power to Java";
       String outStr = stringOp(MyStringOps::strReverse, inStr);
       //使用Lambda表达式:String outStr=stringOp((x)->MyStringOps.strReverse(x),inStr);
       System.out.println("Original string: " + inStr);
       System.out.println("String reserved: " + outStr);
  }
}

注释:这里的MyStringOps::strReverse方法相当于接口StringFunc 的func方法的实现。并且整个调用返回StringFunc

实例方法引用

实例方法和上面差不多,但是不能直接调用MyStringOps而是先将他实例化

MyStringOps my=new MyStringOps();
 String outStr = stringOp(my::strReverse, inStr);
构造方法引用实例
public interface MyFun {

    MyClass fun(int id);
}


public class MyClass {

    private int id;

    public MyClass(){};

    public MyClass(int id) {
        super();
        this.id = id;
    }

    public int get(){
        return id;
    }
}

public class MyFunDome {

    public static void main(String[] args) {
        //使用Lambda表达式:MyFun my=(x)->{return new MyClass(x);};
        MyFun my=MyClass::new;
        MyClass c=my.fun(100);
        System.out.println(c.get());
    }
}

注解:MyFun my=MyClass::new;这句话MyClass的有参构造器是MyFun的fun方法的实现。

猜你喜欢

转载自blog.csdn.net/iuie_sl/article/details/55806442
今日推荐