【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )
文章目錄
- I . 內(nèi)聯(lián)擴(kuò)展函數(shù) apply
- II . Kotlin 調(diào)用 Java API
- III . apply 內(nèi)聯(lián)擴(kuò)展函數(shù)示例 ( 調(diào)用 Java API 處理圖像 )
I . 內(nèi)聯(lián)擴(kuò)展函數(shù) apply
1 . apply 函數(shù)原型 : 泛型 T 類型對(duì)象 , 調(diào)用 apply 方法 , 后面定義了一個(gè)閉包代碼塊 ; 調(diào)用 apply 方法的對(duì)象類型是泛型 , 說明任何對(duì)象都可以調(diào)用該方法 ;
/*** Calls the specified function [block] with `this` value as its receiver and returns `this` value.** For detailed usage information see the documentation for [scope functions]* (https://kotlinlang.org/docs/reference/scope-functions.html#apply).*/ @kotlin.internal.InlineOnly public inline fun <T> T.apply(block: T.() -> Unit): T {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}block()return this }2 . apply 函數(shù)作用 : 擴(kuò)展了調(diào)用 apply 函數(shù)的泛型類型 T 的對(duì)象的操作方法 , 等同于為泛型 T 對(duì)象定義了一個(gè)新的方法 ;
3 . apply 函數(shù)調(diào)用對(duì)象 : 所有的對(duì)象都可以調(diào)用 apply 函數(shù) ,
4 . 閉包代碼塊 說明 :
① 主要功能 : apply 函數(shù)可以指定要執(zhí)行的代碼塊 , 再代碼塊中可以使用 this 訪問其調(diào)用對(duì)象 , 執(zhí)行完畢后 , 會(huì)自動(dòng)返回該對(duì)象 ;
② 調(diào)用 T 對(duì)象本身 : 使用 this 可以訪問該對(duì)象 , 不是 it ;
③ 特點(diǎn) : 在 apply 后的閉包內(nèi) , 可以調(diào)用該 T 對(duì)象的所有成員方法 和 成員變量 ;
④ 返回值 : appay 方法返回泛型類型 T 對(duì)象本身 , 即在閉包內(nèi)執(zhí)行的針對(duì) T 對(duì)象的內(nèi)容是保存下來的
II . Kotlin 調(diào)用 Java API
Kotlin 與 Java 代碼是完全兼容的 , 因?yàn)槠涠际腔?Java 虛擬機(jī)的語言 ;
Kotlin 中可以調(diào)用 Java 語言的類和方法 ;
Java 語言中也可以調(diào)用 Kotlin 的類和方法 ;
因此 Kotlin 中是可以調(diào)用 Java 的 API 函數(shù)庫的 , 這極大的拓展了 Kotlin 的功能 ;
III . apply 內(nèi)聯(lián)擴(kuò)展函數(shù)示例 ( 調(diào)用 Java API 處理圖像 )
package picimport java.awt.image.BufferedImage import java.io.File import javax.imageio.ImageIO/*Kotlin 圖像處理涉及到調(diào)用 Java API 中的方法*/ fun main() {/*Kotlin 中可以使用 Java 的所有 API , 這里使用 Java 的圖像操作 API 進(jìn)行圖像處理作用 : BufferedImage 作用是在內(nèi)存中生成圖片 , 下面代碼的含義是 :在內(nèi)存中傳入一個(gè)寬高為 100 像素, 像素格式為 TYPE_INT_RGB 的圖像構(gòu)造方法 : BufferedImage 初始化傳入的三個(gè)參數(shù)分別是 圖像的 寬 和 高 , 圖像的像素格式 RGB*/var image = BufferedImage(100 , 100, BufferedImage.TYPE_INT_RGB)/*使用高階函數(shù) ( 參數(shù)和返回值為函數(shù)的函數(shù) )Calls the specified function [block] with `this` value as its receiver and returns `this` value.For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#apply).@kotlin.internal.InlineOnlypublic inline fun <T> T.apply(block: T.() -> Unit): T {contract {callsInPlace(block, InvocationKind.EXACTLY_ONCE)}block()return this}apply 函數(shù)作用 :作用 : 擴(kuò)展了調(diào)用 apply 函數(shù)的泛型類型 T 的對(duì)象的操作方法 , 等同于為泛型 T 對(duì)象定義了一個(gè)新的方法特點(diǎn) : 在 apply 后的閉包內(nèi) , 可以調(diào)用該 T 對(duì)象的所有成員方法 和 成員變量返回值 : appay 方法返回泛型類型 T 對(duì)象本身 , 即在閉包內(nèi)執(zhí)行的針對(duì) T 對(duì)象的內(nèi)容是保存下來的調(diào)用 T 對(duì)象本身 : 使用 this 可以訪問該對(duì)象 , 不是 itapply 接收一個(gè)函數(shù)類型參數(shù) block: T.() -> Unit函數(shù)類型變量名 : block 是函數(shù)類型實(shí)例名稱T.() -> Unit : 函數(shù)類型T 表示 image 本身T.() 表示 image 本身的成員方法 , 其返回值是 Unit 空類型*/image.apply {// i 在 0 到 99 的閉區(qū)間for(i in 0 .. 99){// j 在 0 到 99 的閉區(qū)間for (j in 0 .. 99){setRGB(i, j, 0xFFFFFF)}}}/*設(shè)置圖像中某像素點(diǎn)的顏色值參數(shù) int x : 像素點(diǎn)的 x 坐標(biāo)參數(shù) int y : 像素點(diǎn)的 y 坐標(biāo)參數(shù) int rgb : 像素點(diǎn)的顏色值下面的代碼含義是將圖像 四個(gè)角 和 中心 的像素設(shè)置成 紅色*/image.setRGB(0, 0, 0xFF0000)image.setRGB(0, 99, 0xFF0000)image.setRGB(50, 50, 0xFF0000)image.setRGB(99, 0, 0xFF0000)image.setRGB(99, 99, 0xFF0000)/*將內(nèi)存中的圖像寫出到本地三個(gè)參數(shù)分別是 : 圖像數(shù)據(jù) , 圖像格式 , 圖像輸出的 File 對(duì)象*/ImageIO.write(image, "bmp", File("image.bmp"))}
生成的圖像展示 :
總結(jié)
以上是生活随笔為你收集整理的【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JetPack】视图绑定 ( View
- 下一篇: 【Kotlin】Kotlin 语言集合中