Kotlin的註解類別實例教學分享
這篇文章主要介紹了Kotlin 的註解類別詳解及實例的相關資料,需要的朋友可以參考下
Kotlin 的註解類別詳解及實例
#註解宣告
註解是將元資料附加到程式碼的方法。若要宣告註解,請將annotation 修飾符放在類別的前面:
annotation class Fancy
註解的附加屬性可以透過用元註解標註註解類別來指定:
@Target 指定可以用該註解標註的元素的可能的型別(類別、函數、屬性、表達式等);
@Retention 指定該註解是否儲存在編譯後的class 檔案中,以及它在執行時能否透過反射可見(預設都是true);
@Repeatable 允許在單一元素上多次使用相同的該註解;
@MustBeDocumented 指定註解是公有API 的一部分,並且應該包含在產生的API 文檔中顯示的類別或方法的簽名中。
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION,
AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION)
@ Retention(AnnotationRetention.SOURCE)
@MustBeDocumented
annotation class Fancy
#用法
@Fancy class Foo { @Fancy fun baz(@Fancy foo: Int): Int { return (@Fancy 1) } }
如果需要對類別的主建構子進行標註,則需要在建構函式宣告中新增constructor 關鍵字,並將註解加入其前面:
class Foo @Inject constructor(dependency: MyDependency) { // …… }
你也可以標註屬性存取器:
##
class Foo { var x: MyDependency? = null @Inject set }
#建構子
註解可以有接受參數的建構子。annotation class Special(val why: String) @Special("example") class Foo {}
annotation class ReplaceWith(val expression: String) annotation class Deprecated( val message: String, val replaceWith: ReplaceWith = ReplaceWith("")) @Deprecated("This function is deprecated, use === instead", ReplaceWith("this === other"))
import kotlin.reflect.KClass annotation class Ann(val arg1: KClass<*>, val arg2: KClass<out Any?>) @Ann(String::class, Int::class) class MyClass
Lambda 表達式
註解也可以用於 lambda 表達式。它們會被應用在產生 lambda 表達式體的 invoke() 方法上。這對於像 Quasar這樣的框架很有用, 該框架使用註解進行並發控制。annotation class Suspendable val f = @Suspendable { Fiber.sleep(10) }
註解使用處目標
#當屬性或主建構函數參數進行標註時,從對應的Kotlin 元素產生的Java 元素會有多個,因此在產生的Java 字節碼中該註解有多個可能位置。如果要指定精確地指定應該如何產生該註解,請使用下列語法:
#
class Example(@field:Ann val foo, // 标注 Java 字段 @get:Ann val bar, // 标注 Java getter @param:Ann val quux) // 标注 Java 构造函数参数
@file:JvmName("Foo") package org.jetbrains.demo
class Example { @set:[Inject VisibleForTesting] var collaborator: Collaborator }
- file
- property(具有此目標的註解對Java 不可見)
- field
- get(屬性getter)
- set(屬性setter)
- receiver(擴充函數或屬性的接收者參數)
- #param(建構子參數)
- setparam(屬性setter 參數)
- delegate(為委託屬性儲存其委託實例的欄位)
fun @receiver:Fancy String.myExtension() { }
如果不指定使用處目標,則根據正在使用的註解的@Target 註解來選擇目標。如果有多個適用的目標,則使用下列清單中的第一個適用目標:
param
property
field
Java 注解
Java 注解与 Kotlin 100% 兼容:
import org.junit.Test import org.junit.Assert.* import org.junit.Rule import org.junit.rules.* class Tests { // 将 @Rule 注解应用于属性 getter @get:Rule val tempFolder = TemporaryFolder() @Test fun simple() { val f = tempFolder.newFile() assertEquals(42, getTheAnswer()) } }
因为 Java 编写的注解没有定义参数顺序,所以不能使用常规函数调用 语法来传递参数。相反,你需要使用命名参数语法。
// Java public @interface Ann { int intValue(); String stringValue(); } // Kotlin @Ann(intValue = 1, stringValue = "abc") class C
就像在 Java 中一样,一个特殊的情况是 value 参数;它的值无需显式名称指定。
// Java public @interface AnnWithValue { String value(); } // Kotlin @AnnWithValue("abc") class C
如果 Java 中的 value 参数具有数组类型,它会成为 Kotlin 中的一个 vararg 参数:
// Java public @interface AnnWithArrayValue { String[] value(); } // Kotlin @AnnWithArrayValue("abc", "foo", "bar") class C
对于具有数组类型的其他参数,你需要显式使用 arrayOf:
// Java public @interface AnnWithArrayMethod { String[] names(); } // Kotlin @AnnWithArrayMethod(names = arrayOf("abc", "foo", "bar")) class C
注解实例的值会作为属性暴露给 Kotlin 代码。
// Java public @interface Ann { int value(); } // Kotlin fun foo(ann: Ann) { val i = ann.value }
以上是Kotlin的註解類別實例教學分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

得物APP是當前十分火爆品牌購物的軟體,但是多數的用戶不知道得物APP中功能如何的使用,下方會整理最詳細的使用教程攻略,接下來就是小編為用戶帶來的得物多功能使用教學匯總,有興趣的用戶快來一起看看吧!得物使用教學【2024-03-20】得物分期購怎麼使用【2024-03-20】得物優惠券怎麼獲得【2024-03-20】得物人工客服怎麼找【2024-03-20】得物取件碼怎麼查看【2024-03-20】得物求購在哪裡看【2024-03-20】得物vip怎麼開【2024-03-20】得物怎麼申請退換貨

1.首先我們進入到網易雲音樂中,然後在軟體首頁介面中,點選進入到歌曲的播放介面中。 2.然後在歌曲播放介面中,找到右上方的分享功能按鈕,如下圖紅框所示位置,點擊選擇分享的管道;在分享管道中,點擊底部的「分享至」選項,然後選擇第一個“微信朋友圈”,即可將內容分享至微信朋友圈。

夏天雨後,常常能見到美麗又神奇的特殊天氣景象-彩虹。這也是攝影中可遇而不可求的難得景象,非常出片。彩虹出現有這樣幾個條件:一是空氣中有充足的水滴,二是太陽以較低的角度照射。所以下午雨過天晴後的一段時間內,是最容易看到彩虹的時候。不過彩虹的形成受天氣、光線等條件的影響較大,因此一般只會持續一小段時間,而最佳觀賞、拍攝時間更為短暫。那麼遇到彩虹,怎樣才能合理地記錄下來並拍出質感呢? 1.尋找彩虹除了上面提到的條件外,彩虹通常出現在陽光照射的方向,即如果太陽由西向東照射,彩虹更有可能出現在東

JUnit框架中的註解用於聲明和配置測試方法,主要註解包括:@Test(聲明測試方法)、@Before(測試方法執行前運行的方法)、@After(測試方法執行後運行的方法)、@ BeforeClass(所有測試方法執行前運行的方法)、@AfterClass(所有測試方法執行後運行的方法),這些註解有助於組織和簡化測試程式碼,並透過提供明確的意圖和配置來提高測試程式碼的可讀性和可維護性。

近期,百度網盤安卓客戶端迎來了全新的8.0.0版本,這個版本不僅帶來了許多變化,還增添了許多實用功能。其中,最引人注目的便是資料夾共享功能的增強。現在,使用者可以輕鬆邀請好友加入,共同分享工作與生活中的重要文件,實現更便利的協作與分享。那麼究竟該如何分享給好友自己需要分享的文件呢,下文中本站小編就會為大家帶來詳細內容介紹,希望能幫助大家! 1)開啟百度雲APP,先點選在首頁選擇相關的資料夾,再點選介面右上角的【...】圖示;(如下圖)2)接著點選「共用成員」一欄中的【+ 】,最後在勾選所

Java和Kotlin函數的區別:語法:Java函數需要明確參數類型和名稱,而Kotlin可以省略類型並使用lambda表達式;參數:Kotlin可以使用更簡潔的語法省略參數類型;返回值:Kotlin可以省略返回值類型,預設為Unit;擴充函數:Kotlin可以為現有類別新增函數,而Java需要透過繼承實作類似功能;實例方法呼叫:Kotlin可以省略物件名,使用更簡潔的語法。

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯
