国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí)

30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí)

2020-09-07 09:17JohnTsai Java教程

本篇文章主要介紹了30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

前言

Google在今年發(fā)布Android N開發(fā)者預(yù)覽版,一并宣布開始支持Java 8。我們終于能在Android開發(fā)中使用到Java8的一些語言特性了。目前支持:

  1. 默認(rèn)方法
  2. lambda表達(dá)式
  3. 多次注解

今天我們就簡要學(xué)習(xí)lambda表達(dá)式。

配置開發(fā)環(huán)境

首先需要下載安裝JDK1.8。

如果想在Android開發(fā)中使用lambda表達(dá)式,需要在Android Studio中配置Java 8開發(fā)環(huán)境。

配置app的Gradle文件:

  1. 開啟jack編譯選項(xiàng)
  2. 設(shè)置編譯選項(xiàng)兼容到1.8
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
android {
  defaultConfig {
    ...
    //開啟jack編譯
    jackOptions {
      enabled true
    }
  }
  ...
  //將編譯選項(xiàng)設(shè)置為Java1.8
  compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
  }
}

出于種種原因,可能我們使用的JDK版本是1.7甚至更低,但是我們又想學(xué)習(xí)使用lambda表達(dá)式,怎么辦呢?Github上已經(jīng)有開發(fā)者設(shè)計(jì)了兼容lambda表達(dá)式到Java7,6,5的開源庫retrolamda。至于如何在Android Studio中配置,在此就不啰嗦了。可以參看Gradle Retrolambda Plugin

第一個(gè)lambda表達(dá)式

看到下面的代碼,相信大家都會(huì)非常熟悉。這不就是給button設(shè)置監(jiān)聽事件嘛。

?
1
2
3
4
5
6
button.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
       Log.d("TAG","按鈕被點(diǎn)擊,匿名內(nèi)部類");
     }
   });

分析上面的代碼,這是通過匿名內(nèi)部類來設(shè)置Button的點(diǎn)擊監(jiān)聽事件的。也就是說,我們創(chuàng)建了一個(gè)實(shí)現(xiàn)了 View.OnClickListener 接口的匿名類的對(duì)象。匿名內(nèi)部類實(shí)現(xiàn)了 onClick 方法。通過這個(gè)匿名類的對(duì)象,我們?cè)谟脩酎c(diǎn)擊按鈕時(shí),打印出日志。

可是,大家有沒有發(fā)現(xiàn)。上面那段代碼,真正有用的就是 Log.d("TAG","按鈕被點(diǎn)擊,匿名內(nèi)部類"); 這一行代碼,這就反映了使用匿名內(nèi)部類的缺點(diǎn):

  1. 可讀性差,不能直接明了的體現(xiàn)我們的意圖。
  2. 啰嗦,一行邏輯代碼卻有幾行模板代碼。

而lambda表達(dá)式很好的解決了這些問題:

?
1
button.setOnClickListener(view-> Log.d(TAG,"按鈕被點(diǎn)擊,lambda表達(dá)式"));

 view-> Log.d(TAG,"按鈕被點(diǎn)擊,lambda表達(dá)式")); 就是我們寫的第一個(gè)lambda表達(dá)式。

lambda表達(dá)式通常以 (argument)->(body) 這樣的格式書寫。

?
1
2
3
4
5
//省略參數(shù)類型
(arg1,arg2...) -> {body}
 
//指定參數(shù)類型
(Type1 arg1,Type2 arg2...)->{body}

lambda表達(dá)式中,參數(shù)的類型可省略。Java編譯器根據(jù)表達(dá)式的上下文推導(dǎo)出參數(shù)的類型。就像上面圖中 view 的類型是 View 。

lambda表達(dá)式的結(jié)構(gòu)

  1. 參數(shù)可以是零個(gè)或多個(gè)
  2. 參數(shù)類型可指定,可省略(根據(jù)表達(dá)式上下文推斷)
  3. 參數(shù)包含在圓括號(hào)中,用逗號(hào)分隔
  4. 表達(dá)式主體可以是零條或多條語句,包含在花括號(hào)中
  5. 表達(dá)式主體只有一條語句時(shí),花括號(hào)可省略
  6. 表達(dá)式主體有一條以上語句時(shí),表達(dá)式的返回類型與代碼塊的返回類型一致
  7. 表達(dá)式只有一條語句時(shí),表達(dá)式的返回類型與該語句的返回類型一致
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//零個(gè)
 ()-> System.out.println("no argument");
 
//一個(gè)
 x->x+1
 
//兩個(gè)
 (x,y)->x+y
 
//省略參數(shù)類型
 View.OnClickListener oneArgument = view->Log.d(TAG,"one argument");
 //指定參數(shù)類型
 View.OnClickListener oneArgument = (View view)->Log.d(TAG,"one argument");
 
//多行語句
//返回類型是代碼塊返回的void
View.OnClickListener multiLine = (View view)->{
   Log.d(TAG,"multi statements");
   Log.d(TAG,"second line");
}
 
//返回類型是表達(dá)式主體語句的返回類型int
(int x)->x+1

lambda表達(dá)式的類型

我們都知道,Java是一種強(qiáng)類型語言。所有的方法參數(shù)都有類型,那么lambda表達(dá)式是一種什么類型呢?

?
1
2
3
4
5
6
7
8
View.OnClickListener listener = new View.OnClickListener() {
     @Override
     public void onClick(View v) {
       //...
     }
   };
   
button.setOnClickListener(listener);

如上所示,以往我們是通過使用單一方法的接口來代表一個(gè)方法并且重用它。

在lambda表達(dá)式中,仍使用的和之前一樣的形式。我們叫做函數(shù)式接口(functional interface)

如我們之前button的點(diǎn)擊響應(yīng)事件使用的 View.OnClickListener 就是一個(gè)函數(shù)式接口。

?
1
2
3
4
5
6
7
8
public class View implements Drawable.Callback, KeyEvent.Callback,
    AccessibilityEventSource {
    ...
 public interface OnClickListener {
    void onClick(View v);
  }
  ...
  }

那究竟什么樣的接口是函數(shù)式接口呢?

函數(shù)式接口是只有一個(gè)抽象方法的接口。用作表示lambda表達(dá)式的類型。

Java8 API中新增了許多函數(shù)式接口:

 

接口名 參數(shù) 返回值 用途
Predicate T boolean 斷言
Consumer T void 消費(fèi)
Function T R 函數(shù)
Supplier None T 工廠方法
UnaryOperator T T 邏輯非
BinaryOperator (T,T) T 二元操作

 

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/JohnTsai/p/5584905.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品在线一区二区三区 | 精品国产乱码一区二区三区四区 | 欧美日韩久久久 | 国产视频久久 | 欧美精品v国产精品v日韩精品 | 亚洲二区在线观看 | 国产综合网站 | 中文字幕一区二区三区不卡 | 免费成人在线网站 | 91av爱爱 | 99re6在线视频精品免费 | www一区二区| 91精彩视频在线观看 | 日韩精品在线视频 | 国产欧美日韩二区 | 成人亚洲电影 | 成人a级网站 | 日韩欧美一区二区三区免费观看 | 日韩簧片| 亚洲第十页 | 精品久久久久久亚洲精品 | 日韩视频一区二区三区 | 久久精品无码一区二区三区 | 97精品一区二区三区 | 黑人av | 最近韩国日本免费高清观看 | 国产精品久久久久久久久久免费看 | 亚洲精品字幕 | 亚洲精品一区二区网址 | 亚洲精彩视频 | 91av导航| 久热精品视频 | 日本一区二区三区视频免费看 | 亚洲在线| 国产一区亚洲二区三区 | 久久男女 | 国产一区二区三区在线视频 | 在线婷婷| 国产高清视频一区 | 久草视频网 | 亚洲 欧美 精品 |