
具體的有關lambda運算式和匿名類的介紹,大家可以查閱我之前寫的文章,這里就不多講了,
本文主要介紹var和匿名類之間的一些平時沒有注意到的問題,
更多內容請訪問www.flydean.com
匿名類中自定義變數
我們看一個經常使用的Runnable匿名類:
Runnable runnable = new Runnable() {
String className=Thread.currentThread().getName();
[@Override](https://my.oschina.net/u/1162528)
public void run() {
log.info("inside runnable");
}
};
和平常使用的Runable不一樣的是,我們為匿名類添加了一個變數叫做className,
因為Runnable介面并沒有定義如何去訪問這個新創建的className欄位,所以使用runnable.className是會編譯錯誤的,
但是如果我們將Runnable替換成為var:
var runnable = new Runnable() {
String className=Thread.currentThread().getName();
[@Override](https://my.oschina.net/u/1162528)
public void run() {
log.info("inside runnable");
}
};
log.info(runnable.className);
可以看到神奇的事情發生了,var變數可以訪問到className,
lambda運算式中的匿名類
我們經常在Stream的遍歷和處理中使用lambda運算式,但是可能很少有人在lambda運算式中使用匿名類,
沒關系,下面我們再舉個例子:
List<Object> objects=Stream.of(1,2,3,4).map(i-> new Object(){
int count=i;
}).filter(o -> o.count >0)
.collect(Collectors.toList());
log.info("{}",objects);
上面的例子中,我們創建了一個stream,在map的程序中回傳了新創建的匿名Object,在匿名Object內部我們定義了一個叫做count的變數,
注意在接下來的filter中,我們實際上是可以直接使用map中創建的Object,并且可以直接訪問其新定義的count變數,
總結
本文講解了var變數中一些不為人知的小技巧,同時介紹了在lambda運算式中的匿名類的使用,另外注意:除了本文講的案例,我還整理了最新5套JAVA架構專案實戰教程及大廠面試題庫,需要的可以進裙 783802103,裙檔案下,沒基礎勿進哦!
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/189222.html
標籤:Java
