這篇文章主要介紹了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"))如果需要將一個類別指定為註解的參數,請使用Kotlin 類別(KClass)。 Kotlin 編譯器會 自動將其轉換為 Java 類,以便 Java 程式碼能夠正常看到該註解和參數 。
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 的註解解放在檔案的頂層、package 指令之前或在所有導入之前(如果檔案在預設套件中的話):
@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中文網其他相關文章!

使用Vue.js和Kotlin语言开发安卓应用的一些技巧随着移动应用的普及和用户需求的不断增长,安卓应用的开发越来越受到开发者的关注。在开发安卓应用时,选择合适的技术栈至关重要。近年来,Vue.js和Kotlin语言逐渐成为安卓应用开发的热门选择。本文将介绍使用Vue.js和Kotlin语言开发安卓应用的一些技巧,并给出相应的代码示例。一、搭建开发环境在开始

Kotlin是一种静态类型编程语言,已经在软件开发领域引起了巨大的关注。它简洁易懂的语法、与Java的良好兼容性以及丰富的工具支持,为开发人员提供了许多优势,因此许多开发者都选择Kotlin作为他们的首选语言。在Debian上安装Kotlin编程语言12Bookworm步骤1。首先更新现有系统包。打开终端并输入以下命令:sudoaptupdatesudoaptupgrade这些命令将获取可用更新列表并升级当前程序包,从而确保您的系统是最新的。第2步。安装Java。Kotlin在Java虚拟机(J

win7企业版激活密钥有没有最新的?如果你安装的是官方win7企业版,会提示用windows7企业版产品密钥来激活,否则不能正常使用。所以小编接下来跟大家分享一些win7企业版激活密码,大家一起来看看吧。Q3VMJ-TMJ3M-99RF9-CVPJ3-Q7VF3KGMPT-GQ6XF-DM3VM-HW6PR-DX9G8MT39G-9HYXX-J3V3Q-RPXJB-RQ6D79JBBV-7Q7P7-CTDB7-KYBKG-X8HHCP72QK-2Y3B8-YDHDV-29DQB-QKWWM6JQ

win7系统如何分享wifi热点?我们电脑在连接了网络之后,也是可以进行无线网络的分享的。很多用户想要将自己电脑的网络分享到手机上来使用。很多小伙伴不知道怎么详细操作,小编下面整理了win7系统如何分享wifi热点的操作方法步骤,如果你感兴趣的话,跟着小编一起往下看看吧! win7系统如何分享wifi热点的操作方法步骤 1、要想开启wifi热点,首先得要有无线网卡,笔记本是有自带的,pc的话可以购买一个随身wifi来分享wifi,这里就不叙述了。首先按下键盘上的windows键打开开始菜

如何利用Redis和Kotlin开发异步任务队列功能引言:随着互联网的发展,异步任务的处理变得越来越重要。在开发过程中,经常会遇到一些需要耗时的任务,例如发送邮件、处理大数据等等。为了提高系统的性能和可伸缩性,我们可以使用异步任务队列来处理这些任务。本文将介绍如何利用Redis和Kotlin来开发一个简单的异步任务队列,并提供具体的代码示例。一、什么是异步任

Java和Kotlin函数的区别:语法:Java函数需要明确参数类型和名称,而Kotlin可以省略类型并使用lambda表达式;参数:Kotlin可以使用更简洁的语法省略参数类型;返回值:Kotlin可以省略返回值类型,默认为Unit;扩展函数:Kotlin可以为现有类添加新函数,而Java需要通过继承实现类似功能;实例方法调用:Kotlin可以省略对象名,使用更简洁的语法。

我们都知道windows7系统需要用激活系统之后才能正常使用windows7的各项功能,激活系统我们一般有两种方法一种是使用官方发布的激活码激活,一种是使用网上的激活工具来激活,很多小伙伴都不知道windows7旗舰版激活码使用方法。下面跟小编一起来看看吧。 windows7旗舰版激活码 神key KH2J9-PC326-T44D4-39H6V-TVPBY TFP9Y-VCY3P-VVH3T-8XXCC-MF4YK 236TW-X778T-8MV9F-937GT-QVKBB 87

如何使用Redis和Kotlin开发分布式队列功能引言:随着互联网的迅速发展,分布式系统越来越受到关注。分布式队列是分布式系统的重要组成部分之一,能够实现消息的异步处理和解耦。本文将介绍如何使用Redis和Kotlin开发一个简单的分布式队列,并提供具体的代码示例。一、概述分布式队列能够实现消息的发布和消费,并确保消息不会丢失。在分布式系统中,消息的发布和消


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具