java 8 closure 閉包

在functional programming 裏面常常說起closure 閉包。 那麼究竟閉包是一個什麼東東? 讓人如何難以理解呢?
java


1 閉包定義閉包

closure is an instance of a function that can reference nonlocal variables of thatide

function with no restrictions。這是閉包的英文定義。說實在這段定義確實很抽象讓人難以理解。函數

而後我這裏其實有兩個點把這段定義具體化:spa

1.1。 閉包就是容許做爲參數被傳遞到另一個函數。rest

1.2。 閉包容許訪問(access)修改(modify)閉包的外部變量。it


2根據上面兩點,這裏經過代碼來講明什麼是閉包。io

PS: 這裏我不但願詳細解釋閉包的更深層內容,可是經過列舉代碼來講明java8 部分支持閉包。( java 8 不支持修改外部變量)java8

	List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		
		
		//closure could be assigned to another method
		//這裏說明閉包能夠做爲一個變量
		Predicate<String> predicate = (s) -> "a".equals(s);
		list.stream().filter(predicate);
	
		//closure could be access outer var
		//閉包裏面能夠訪問外部變量
		final String outerStr = "Outer";
		list.forEach(s -> System.out.println(outerStr+s));

		 //因爲java的匿名內部類只容許變量爲final,因此這裏不支持在閉包裏面修改
		 //變量outerStr2   
		//in java closure can't modify outer variable can't not compile
		/*String outerStr2 = "Outer";
		list.forEach(s -> outerStr2 = "modifyOuter");*/
相關文章
相關標籤/搜索