【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )
文章目錄
- I . 內聯(lián)擴展函數(shù) apply
- II . Kotlin 調用 Java API
- III . apply 內聯(lián)擴展函數(shù)示例 ( 調用 Java API 處理圖像 )
I . 內聯(lián)擴展函數(shù) apply
1 . apply 函數(shù)原型 : 泛型 T 類型對象 , 調用 apply 方法 , 后面定義了一個閉包代碼塊 ; 調用 apply 方法的對象類型是泛型 , 說明任何對象都可以調用該方法 ;
/*** 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ù)作用 : 擴展了調用 apply 函數(shù)的泛型類型 T 的對象的操作方法 , 等同于為泛型 T 對象定義了一個新的方法 ;
3 . apply 函數(shù)調用對象 : 所有的對象都可以調用 apply 函數(shù) ,
4 . 閉包代碼塊 說明 :
① 主要功能 : apply 函數(shù)可以指定要執(zhí)行的代碼塊 , 再代碼塊中可以使用 this 訪問其調用對象 , 執(zhí)行完畢后 , 會自動返回該對象 ;
② 調用 T 對象本身 : 使用 this 可以訪問該對象 , 不是 it ;
③ 特點 : 在 apply 后的閉包內 , 可以調用該 T 對象的所有成員方法 和 成員變量 ;
④ 返回值 : appay 方法返回泛型類型 T 對象本身 , 即在閉包內執(zhí)行的針對 T 對象的內容是保存下來的
II . Kotlin 調用 Java API
Kotlin 與 Java 代碼是完全兼容的 , 因為其都是基于 Java 虛擬機的語言 ;
Kotlin 中可以調用 Java 語言的類和方法 ;
Java 語言中也可以調用 Kotlin 的類和方法 ;
因此 Kotlin 中是可以調用 Java 的 API 函數(shù)庫的 , 這極大的拓展了 Kotlin 的功能 ;
III . apply 內聯(lián)擴展函數(shù)示例 ( 調用 Java API 處理圖像 )
package picimport java.awt.image.BufferedImage import java.io.File import javax.imageio.ImageIO/*Kotlin 圖像處理涉及到調用 Java API 中的方法*/ fun main() {/*Kotlin 中可以使用 Java 的所有 API , 這里使用 Java 的圖像操作 API 進行圖像處理作用 : BufferedImage 作用是在內存中生成圖片 , 下面代碼的含義是 :在內存中傳入一個寬高為 100 像素, 像素格式為 TYPE_INT_RGB 的圖像構造方法 : BufferedImage 初始化傳入的三個參數(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ù)作用 :作用 : 擴展了調用 apply 函數(shù)的泛型類型 T 的對象的操作方法 , 等同于為泛型 T 對象定義了一個新的方法特點 : 在 apply 后的閉包內 , 可以調用該 T 對象的所有成員方法 和 成員變量返回值 : appay 方法返回泛型類型 T 對象本身 , 即在閉包內執(zhí)行的針對 T 對象的內容是保存下來的調用 T 對象本身 : 使用 this 可以訪問該對象 , 不是 itapply 接收一個函數(shù)類型參數(shù) block: T.() -> Unit函數(shù)類型變量名 : block 是函數(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ù) int x : 像素點的 x 坐標參數(shù) int y : 像素點的 y 坐標參數(shù) int rgb : 像素點的顏色值下面的代碼含義是將圖像 四個角 和 中心 的像素設置成 紅色*/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)/*將內存中的圖像寫出到本地三個參數(shù)分別是 : 圖像數(shù)據(jù) , 圖像格式 , 圖像輸出的 File 對象*/ImageIO.write(image, "bmp", File("image.bmp"))}
生成的圖像展示 :
總結
以上是生活随笔為你收集整理的【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JetPack】视图绑定 ( View
- 下一篇: 【Kotlin】Kotlin 语言集合中