在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");*/