JDK1.8新特性之Lambda表示式()->

LemonSnm發表於2019-05-01

1.Lambda表示式 

必須是該介面只有一個一般方法才能使用  

2.程式碼實現

package com.lemon;

public class LambdaDemo {

	public static void main(String[] args) {
		
		//第一種方法
		IEat a1 = new IEatImple();
		a1.eat();
		//第二種方法
		IEat a2 = new IEat(){
			@Override
			public void eat() {
				System.out.println("eat orange!");
			}
		};
		a2.eat();
		
		//第三種 Lambda方式    
		//優點: 程式碼簡潔、不生產單獨的class檔案
		//缺點:限制該介面只能有一個方法,才能使用Lambda方式
		
		//(1)沒有引數時
	   //IEat a3 = ()->{System.out.println("eat apple and orange");};
		//程式碼塊只有一句 可以省略大括號
		IEat a3 = ()-> System.out.println("eat apple and orange");
		a3.eat();
		
		//(2)帶引數是使用,引數的型別可以省略
		IEat1 a4 = (username,password)-> System.out.println("username:"+ username + ",password:"+ password);
		a4.eat("admin","123456");
		
		//(3)多句程式碼 大括號不可省略
		IEat1 a5 = (username,password)->{
			System.out.print("username:"+ username); 
			System.out.println(",password:"+ password);
	};
		a5.eat("admin1","123");
		
		//(4)帶返回值的
		IEat2 a6 = (name)->{
			System.out.println("name:" + name);
			return 6;
		};
		//(5)帶返回值的 只有一行程式碼  不需要寫return 6;直接寫返回值 
		IEat2 a7 = (name)-> name != null ? 1 : 0 ;
		System.out.println(a7.eat("123"));
	
		//(6)帶final修飾 要麼不寫,要麼全寫
		//IEat3 a8 = (final String name)-> name != null ? 1 : 0;
		IEat3 a8 = (name)-> name != null ? 1 : 0;
	}	
}
	
//只有一個抽象方法的介面 無引數
interface IEat{
	public void eat();
}

//介面的實現
class IEatImple implements IEat{

	@Override
	public void eat() {
		System.out.println("eat apple!");	
	}
}


//有引數
interface IEat1{
	public void eat(String username,String password);
}

//帶返回值的
interface IEat2{
	public int eat(String name);
}

//引數final修飾
interface IEat3{
	public int eat(final String name);
}

3.介面中的預設方法和靜態方法

介面中只有一個一般方法,不論有幾個預設方法和靜態方法都不影響Lembda表示式的影響

 

 

相關文章