Kotlin 注解

文章目錄

  • 定義
  • 注解類的注解
  • 標注目標聲明

定義

注解使用annotation關鍵字定義,且只能用于普通類,該類被稱為注釋類。可以使用@注釋類為某個變量、函數、類、接口等注釋。與我們寫的代碼注釋類似,注釋類可以指明被標注類的狀態、作用等等(注解一般是在代碼檢查、編譯時使用,非專業人士了解一下即可,會用就行)。

// 定義注解
annotation class MyAnnotation()// 標注變量(無論寫在同一行還是換行都行)
@MyAnnotation val name = "Kotlin"// 標注函數
@MyAnnotation
fun getName() = name// 標注 lambda 函數
val myLambda = @MyAnnotation {}// 標注主構造函數(需要給出 constructor 關鍵字)
class MyClazz @MyAnnotation constructor()// 標注 getter
val kVersion@MyAnnotationget() = "2.0.0"// 標注類
@MyAnnotation
class MyClass// 標注接口
@MyAnnotation
interface MyInterface

注解類中**不能聲明成員(變量或方法),但可以在構造函數處聲明成員變量。
如果注解類構造函數有參數,在標注時可以傳入:

annotation class MyAnnotation(val name: String)@MyAnnotation("MyClass")
class MyClass

注解類的注解

可以對注解類進行注解標記,以滿足我們的需求(以下這些注解只能用于標注注解類)。

  • @Target用于指定可被注解類標記的類型,可以傳入0個(此時無法標注)或多個枚舉類AnnotationTarget的值。
    // 指定只能對類別名 typealias 使用
    @Target(AnnotationTarget.TYPEALIAS)
    annotation class MyAnnotation()@MyAnnotation typealias Anything = Any// @MyAnnotation 此時不能標記 MyClass
    class MyClass
    
  • @Retention指定該注解是否存在于編譯后的 class 文件中和是否在運行時反射可見,默認都為true(非專業人士表示不懂)。
  • @Repeatable指定該注解可以多次用于同一目標。默認為false
  • @MustBeDocumented指明該注解是公共 API(public API)并且在生成 API(generated API)的類或方法標簽名中應該說明(非專業人士)。

標注目標聲明

當我們標注時,可以聲明被標注的目標:

annotation class MyAnnotation// 標注 setter
@set:MyAnnotation
var name = "Kotlin"

可以使用的目標聲明有:

  • file
  • property
  • field
  • get
  • set
  • receiver
  • param
  • setparam
  • delegate

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22202.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22202.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能體應用開發:構建各類垂直領域的ai智能體應用

最近在做個類似的項目,有用到這方面的知識,順便做一些記錄和筆記吧,希望能幫到大家了解智能體應用開發 目錄 引言 AI原生應用的興起 智能體在AI中的角色 實現原理詳解 機器學習基礎 數據管理與關聯數據庫 數據結構 Embedding 檢索方…

Pytorch實用教程:torch.cat()函數的用法詳解

torch.cat 是 PyTorch 中用于沿指定維度連接張量的函數。以下是該函數的詳細用法: 語法 torch.cat(tensors, dim=0, *, out=None)參數說明 tensors (sequence of Tensors): 要連接的張量序列。這些張量必須具有相同的形狀(除了連接的維度)。dim (int, optional): 沿著哪個…

衛星位置解算

前言: 本章節代碼均在Gitee中開源: 衛星位置計算代碼https://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/GPS%E5%8D%AB%E6%98%9F%E4%BD%8D%E7%BD%AE%E8%A7%A3%E7%AE%97/Satellit…

SAP物料自動記賬科目設置總結

SAP物料自動記賬科目設置總結 目錄 物料自動記賬科目設置總結... 1 總體說明... 1 庫存移動事務類型的設置... 4 庫存科目設置... 6 期初導入... 6 業務舉例... 6 配置... 6 庫存初始單據... 7 采購收貨(缺少到票) 8 業務舉例... 8 配置... 8 采購收貨單據-MIGO_GR…

心懷希望の光柵化

還記得什么是光柵化咩? 將三維空間的幾何形體顯現在屏幕上,這就是光柵化(游戲、實時圖形學的應用) Perspective Projection 在正交投影里如何定義三維空間中的立方體呢? 用x軸的覆蓋(左、右)…

【UML用戶指南】-02-UML基本元素的介紹(二)

目錄 1、語法和語義規則 2、UML中的公共機制 (1)規約 (2)修飾 (3)通用劃分 (4)擴展機制 衍型/版型/類型(stereotype) 標記值 (tagged val…

Java編程常見問題匯總四

系列文章目錄 文章目錄 系列文章目錄前言一、忽略所有異常二、重復包裝RuntimeException三、不正確的傳播異常四、用日志記錄異常五、異常處理不徹底 前言 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。…

[C/C++]_[初級]_[在Windows和macOS平臺上導出動態庫的一些思考]

場景 最近看了《COM本質論》里關于如何設計基于抽象基類作為二進制接口,把編譯器和鏈接器的實現隱藏在這個二進制接口中,從而使用該DLL時不需要重新編譯。在編譯出C接口時,發現接口名直接是函數名,比如BindNativePort,怎么不是_BindNativePort?說明 VC++導出的函數默認是使…

專轉本英語應該怎么學?

來吧,寶子們,學姐給你們分享專轉本英語如何備考的方法了,單詞+語法,兩不耽誤,快拿著你們的小手來截圖記筆記啦~ 1、基礎差直接背單詞 對于基礎差的人呢,本身我們對英語這個科目就不感…

Google Earth Engine精度評價方法

今天講講如何在GEE中做最后的精度評價。主要是因為在和許多讀者或通過交流群,或通過私聊溝通過程中,發現很多人還不是很理解在GEE中分類后精度評價的問題。 在進行評價之前,需要明晰在GEE中精度評價分為哪幾種情況。我們這里說的是兩種情況。…

收藏品NFT的開發流程

開發收藏品NFT的流程涉及多個階段,從概念化和設計到技術實現和市場推廣。以下是詳細的開發步驟,通過這些步驟,可以成功開發和發布收藏品NFT項目,吸引用戶和投資者,并確保項目的持續運營和成功。北京木奇移動技術有限公…

Fiddler入門(接口抓包及APP測試)

目錄 一、Fiddler基礎介紹 二、Fiddler的作用 三、Fiddler安裝 四、Fiddler界面功能介紹 1、界面介紹 1)、菜單欄介紹 2)、工具欄介紹 3)、會話欄介紹 五、Fiddler抓取https數據 (面試題) 六、Fiddler…

C++ lambda表達式的作用和代碼示例

Lambda 表達式是 C11 引入的一種匿名函數語法,它可以方便地創建臨時函數對象,用于在函數調用時作為參數傳遞或者作為局部函數使用。Lambda 表達式可以捕獲外部變量,并具有與普通函數相似的語法結構。 主要作用如下: 簡化代碼&am…

【刷題(17)】技巧

一 技巧基礎 二 136. 只出現一次的數字 1 題目 2 解題思路 哈希表map 其實看到題目數組中某個元素出現的次數也可以直接用unordered_map容器統計每一個元素出現的次數,然后在遍歷整個map容器查看是否有元素出現的次數等于1 3 code class Solution { public:in…

商城項目【尚品匯】07分布式鎖-2 Redisson篇

1 Redisson功能介紹 基于自定義setnx實現的分布式鎖存在下面的問題: 重入問題:重入問題是指 獲得鎖的線程可以再次進入到相同的鎖的代碼塊中,可重入鎖的意義在于防止死鎖,比如HashTable這樣的代碼中,他的方法都是使用…

LightGBM 進行回歸建模的流程

LightGBM 進行回歸建模的流程 文章最前: 我是Octopus,這個名字來源于我的中文名–章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有…

將HTML頁面中的table表格元素轉換為矩形,計算出每個單元格的寬高以及左上角坐標點,輸出為json數據

export function huoQuTableElement() {const tableData []; // 存儲表格數據的數組let res [];// 獲取到包含表格的foreignObject元素const foreignObject document.getElementById(mydctable);if (!foreignObject){return ;}// 獲取到表格元素let oldTable foreignObject…

Nativefier : 將網址打包成exe桌面程序

1、需求場景 在日常開發中,需要針對一些網頁在一體機上使用,同時在瀏覽器上也可以使用,這里推薦大家用nativefier,對網址進行打包。以下是nativefier安裝命令: npm install nativefier -g 2、使用方法 --arch 系統 …

《混凝土壩監測儀器系列型譜》修訂中監測儀器分類方案解讀

隨著科技的不斷進步和監測需求的日益增加,對監測儀器分類方案進行修訂已成為必然的趨勢。本文旨在探討《混凝土壩監測儀器系列型譜》中對現有儀器分類方式的修訂,以及監測儀器選用的相關內容。希望對大家中有所幫助: 一、取消過時條目&#x…

服務器是一種高性能計算機

服務器是一種高性能計算機,專門設計用于在網絡中提供各種服務。它們通常具備比普通計算機更快的CPU運算能力、更可靠的運行性能、更大的I/O外部數據吞吐能力以及更好的擴展性。