1. 程式人生 > >Java8中Lamda表示式和方法引用的基本語法

Java8中Lamda表示式和方法引用的基本語法

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方法
		 
	}
	

}