Java雙冒號語法


雙冒號(::)運算符使用(DoubleColon)

其就是對lambda表達式的簡寫。被用作方法的引用。使用lambda表達式會創建匿名方法,但是有時候需要一個lambda表達式只用於調用一個已經存在的方法,在此才有了方法引用。

  1. 靜態方法的引用(static method)
public class Demo {
	@Test
	public void test() {
		List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");
		
		//靜態方法語法	ClassName::methodName
		list.forEach(Demo::print);
	}
	
	public static void print(String content){
		System.out.println(content);
	}
}
  1. 對象的實例方法引用。
public class Demo {
	@Test
	public void test() {
		List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");
		
		//靜態方法語法	ClassName::methodName
		list.forEach(new Demo()::print);
	}
	
	public void print(String content){
		System.out.println(content);
	}
}
  1. 對象的超類方法引用
public class Example extends BaseExample{

	@Test
	public void test() {
		List<String> list = Arrays.asList("aaaa", "bbbb", "cccc");
		
		//對象的超類方法語法: super::methodName 
		list.forEach(super::print);
	}
}

class BaseExample {
	public void print(String content){
		System.out.println(content);
	}
}
  1. 類構造器引用
public class Example {

	@Test
	public void test() {
		InterfaceExample com =  Example::new;
		Example bean = com.create();
        Example bean = com.create("STRING");
		System.out.println(bean);
	}
}

interface InterfaceExample{
    //不帶參數
	Example create();
    //帶參數
    Example create();
}
  1. 數組構造器引用
public class Example {
	public static void main(String[] args) {
		Function <Integer, Example[]> function = Example[]::new;
		Example[] array = function.apply(4);	//這里的4是數組的大小
		
		for(Example e:array){
			System.out.println(e);	//如果輸出的話,你會發現會輸出4個空對象(null)
		}
	}
} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM