隨著技術的不斷發展,jdk8也坐上了業界的頭把交椅,在此簡單敘述下8較之以往的部分新特性
函式式介面必須有且只有乙個抽象方法,可有0或多個default方法,default方法無需實現,可在實現類中直接呼叫,可有0或多個static方法,函式式介面中的default和static方法,都可通過inte***ce.method()的方式直接呼叫,其中註解@functionalinte***ce可用來限制函式式介面不能修改為普通的介面。
需要注意以下幾點:
**如下(示例)
//介面
@functionalinte***ce
public
inte***ce
inte***cetest
;static
void
staticmethod()
;}//實現類
public
class
lambdatest
implements
lambdainte***ce
@override
public
void
******method()
}
我們可以把lambda表示式可以看成匿名內部類的簡寫方式。前提是這個匿名內部類必須是乙個函式式介面,其基本語法為:(引數列表) -> ,在jdk1.8中comparator和runnable介面就是典型的函式式介面,下面以comparator介面來演示
需要注意以下幾點:
**如下(示例):
list
list = arrays.
aslist(1
,3,2
);collections.
sort
(list,
newcomparator
()})
;//根據基本語法(引數列表) -> 寫為
list.
sort
((integer o1,integer o2)
->);
//根據簡化規則可簡寫為
list.
sort
((o1,o2)
-> o1 - o2 )
;
在日常書寫**的過程,我們需要經常對變數進行判空處理,才有可能避免空指標問題。optional的出現在一定程度上幫我們解決了這個問題。
在這段**中,只要user或address為空就會導致空指標
string postcode = user.
getaddress()
.getpostcode()
;
如果想要避免這個問題,我們需要把**寫成這樣
string postcode ="";
if(user != null)
}
當我們引入optional時可以把**寫成這樣
string postcode= optional.
ofnullable
(user)
.flatmap
(u -
> u.
getaddress()
).flatmap
(a -
> a.
getcountry()
).map(c -
> c.
getisocode()
).orelse
("default postcode"
);
關於optional現在個人只懂這麼多,有內容之後再補充吧
新的特性還有stream api、新的date類、hashmpa實現的改變,剩下的以後再說
個人感覺lambda表示式和optional更像是語法糖,雖然會讓**看起來簡潔很多,卻犧牲了一部分可讀性,當團隊內技術水平良莠不齊的時候,這將會增大**更新維護的成本
Java之final特性簡述
1 final變數 一旦宣告的final變數被賦值後,就不能改變該變數的值。乙個既是static又是final的字段只佔據一段不能改變的儲存空間。2 final方法 被final定義的方法不能被重寫,乙個定義為private的方法隱式的被指定為final型別。定義為final的方法可以使執行時的效率...
JDK1 8的新特性
jdk1.8之前的介面不可以有方法體,但從jdk1.8開始,介面中的方法可以帶有方法體為什麼要新增這個特性?介面就是為了定義乙個標準,這個標準要求所有的實現類實現這些抽象方法。但存在某些方法,所有的實現類 都是一樣的,索性就把這些 挪到介面中。使用的方法?通過default來修飾這個方法public...
JDK1 8新特性簡介
可以用static default來定義介面方法 用default來定義普通方法,這樣子類就不用強制覆寫這個方法了。用static來定義靜態方法 專給lanmda使用的介面加上annotation functionalinte ce 其中只能有乙個方法 使用 引數 程式執行語句 引數 簡單返回 引數...