Java8中Lamda表示式和方法引用的基本語法
阿新 • • 發佈:2019-01-26
Lamda表示式基本實現:
package cn.demo; @FunctionalInterface//函數語言程式設計註解,只接口允許有一個普通的抽象方法,但可以有 預設方法靜態方法 interface IMessage0{ String msg="xx"; public static void read() { } public void print(); default void write(){ System.out.println(this.msg); } } class Action { public Action(IMessage0 im){ im.print(); } public void print(IMessage0 im){ im.print(); } } public class LamdaTest { public static void main(String[] args) { IMessage0 im = ()->System.out.println("read");//例項化函式式介面 im.print(); new Action(()->System.out.println("fuck!"));//傳入函式式介面的引數,輸出了fuck! } }
方法實現(基於函數語言程式設計的基礎上,否則無效):
引用類的方法:類名稱::方法名稱
引用某個物件的方法:物件名::普通方法
引用構造方法:類名稱::new
package cn.demo; @FunctionalInterface//函數語言程式設計註解,只接口允許有一個普通的抽象方法 interface IUtil<R,P>{ public R convert(P p,P r); } @FunctionalInterface interface IUtil2<P>{ public P convert(); } class Person0 { private String name; private int age; public Person0(String name,int age){ this.name=name; this.age=age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } @FunctionalInterface interface IPerson<R,FP,SP> { public R create(FP p1,SP p2); } public class LamdaTest2 { public static void main(String[] args) { // IUtil<Integer,String> iu = String :: valueOf;呼叫靜態方法,方法引數被下面改會出錯所以註釋掉 // String str = iu.convert(1000);//這裡的convert(1000)相當於相當於String.valueOf(1000) // System.out.println(str); IUtil<Integer,String> iu2 = String ::compareTo;//呼叫普通方法 System.out.println(iu2.convert("H", "h"));//iu2.convert("H", "h")等同於compareTo("H","h")結果-32 IUtil2<String> iu3 = "hello"::toUpperCase;//呼叫某個物件的方法 System.out.println(iu3.convert());//結果為HELLO IPerson<Person0,String,Integer> ip = Person0::new; System.out.println(ip.create("張三", 20));//這裡直接返回一個例項化物件,輸出Person的toString方法 } }