kotlin JvmName注解的作用和用途

1. @JvmName 注解的作用

@JvmName 是 Kotlin 提供的一個注解,用于在編譯為 Java 字節碼時自定義生成的類名或方法名

  • 作用對象

    • 文件級別(整個 .kt 文件)
    • 函數、屬性、類等成員
  • 主要用途

    • 控制 Kotlin 編譯后生成的 JVM 類名和方法名。
    • 避免與 Java 的命名沖突。
    • 提高 Java 調用 Kotlin 代碼時的可讀性和一致性。

2. 使用場景

? 場景 1:修改 Kotlin 文件對應的 JVM 類名

Kotlin 默認會將文件 FileName.kt 編譯成 FileNameKt.class
使用 @file:JvmName("CustomName") 可以指定生成的類名為 CustomName.class

@file:JvmName("Stu")
package com.mayh.kotlindemo.kt_step7.kt_annotaionfun getStudentInfo(name: String) {println(name)
}

編譯后生成的類名為:Stu.class


? 場景 2:修改 Kotlin 函數在 JVM 中的方法名

可以給某個函數添加 @JvmName("customMethodName"),使其在 Java 中調用時使用指定名稱。

@JvmName("getSt")
fun getStudentInfo(studentName: String) = println(studentName)

編譯后生成的方法名為:public static final void getSt(String studentName)


? 場景 3:解決 Java 調用多個同名 Kotlin 文件函數沖突

當多個 Kotlin 文件包含相同包名下的同名頂層函數時,Java 調用可能會沖突。
通過 @file:JvmName 修改生成的類名即可避免沖突。


? 場景 4:與 @JvmOverloads@JvmField 等配合使用

在混編項目中,結合其他 JVM 相關注解,統一 Kotlin 和 Java 的接口風格。


3. 注意事項

注意點說明
不能重載 by name only如果兩個函數僅通過 @JvmName 改變名字導致簽名相同,會編譯報錯。
避免與 Java 關鍵字沖突如命名成 Int, String 等會導致錯誤。
對擴展函數也有效可以為擴展函數指定 JVM 名稱,便于 Java 調用。

4. 總結

功能描述
@JvmName on file指定整個 Kotlin 文件編譯后的類名
@JvmName on function/property指定該方法/屬性在 JVM 中的名稱
適用場景Java/Kotlin 混合項目、避免命名沖突、提升可讀性
推薦使用方式在需要被 Java 調用的工具類、頂層函數中使用

在 Android 開發或 Java/Kotlin 混合項目中,合理使用 @JvmName 可以讓 Kotlin 更好地兼容 Java,提高代碼的可維護性和交互性。

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

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

相關文章

樹莓派4 yolo 11l.pt性能優化后的版本

樹莓派4 使用 Picamera2 拍攝圖像,然后通過 YOLO11l.pt 進行目標檢測,并在實時視頻流中顯示結果。但當前的代碼在運行時可能會比較卡頓,主要原因包括: picam2.capture_array() 是一個較慢的操作;YOLO 推理可能耗時較長…

Docker私有倉庫實戰:官方registry鏡像實戰應用

抱歉抱歉,離職后反而更忙了,拖了好久,從4月拖到現在,在學習企業級方案Harbor之前,我們先學習下官方方案registry,話不多說,詳情見下文。 注意:下文省略了基本認證 TLS加密&#xff…

MySQL 安全架構:從滲透測試到合規審計

MySQL 安全架構:從滲透測試到合規審計 一、數據庫安全的時代挑戰與核心需求 在數據成為企業核心資產的今天,MySQL 面臨的安全威脅日益復雜。據統計,2024 年全球數據庫泄露事件中,關系型數據庫占比高達 68%,其中 MySQ…

【基礎復習筆記】計算機視覺

目錄 一、計算機視覺基礎 1. 卷積神經網絡原理 2. 目標檢測系列 二、算法與模型實現 1. 在PyTorch/TensorFlow中實現自定義損失函數或網絡層的步驟是什么? 2. 如何設計一個輕量級模型用于移動端的人臉識別? 3. 描述使用過的一種注意力機制&#…

Django 項目的 models 目錄中,__init__.py 文件的作用

在 Django 項目的models/init.py文件中,這些導入語句的主要作用是將各個模型類從不同的模塊中導入到models包的命名空間中。這樣做有以下幾個目的: 簡化導入路徑 當你需要在項目的其他地方使用這些模型時,可以直接從models包導入&#xff0c…

實現一個簡單的 TCP 客戶端/服務器

注意: TCP 三次握手建立連接建立連接后,TCP 提供全雙工的通信服務,也就是在同一個連接中,通信雙方 可以在同一時刻同時寫數據,相對的概念叫做半雙工,同一個連接的同一時刻,只能由一方來寫數據T…

專業課復習筆記 9

前言 學爽了。 為什么哈希函數的空間復雜度是 O(N) 我們實際使用的電話號碼的數目是 N &#xff0c;理論上至多有 R 個電話號碼&#xff0c;桶數組 bucket array 的容量是 M &#xff0c;滿足條件 N < M < < R N<M<<R N<M<<R&#xff0c;因為動…

【論文閱讀27】-TCN–BiLSTM -滑坡預測

《A Landslide Displacement Prediction Model Based on the ICEEMDAN Method and the TCN–BiLSTM Combined Neural Network》 發表于 Water 期刊&#xff0c;2023年。 &#x1f4cc; 主要內容概述 這篇論文提出了一種滑坡位移預測模型&#xff0c;結合了&#xff1a; ICEEM…

8b10b編解碼仿真

一、基本概念 8B/10B編碼&#xff08;8-bit to 10-bit encoding&#xff09;是一種將8位數據&#xff08;包括數據字符和控制字符&#xff09;轉換為10位符號&#xff08;Symbol&#xff09;的編碼技術&#xff0c;由IBM工程師Al Widmer和Peter Franaszek于1983年提出。其核心思…

23龍信服務器wp

中規中矩的一套服務器&#xff0c;比較簡單 1.服務器系統的版本號是___。&#xff08;格式&#xff1a;1.1.1111&#xff09; 2.網站數據庫的版本號是___。&#xff08;格式&#xff1a;1.1.1111&#xff09; 3.寶塔面板的“超時”時間是___分鐘。&#xff08;格式&#xff1a;…

Redis 存儲原理與數據模型(三)

目錄 存儲結構 存儲轉換 數據組織 hash 沖突 負載因子 擴容 縮容 漸進式rehash Redis 線程模型 單線程命令處理機制 為什么Redis 命令的單線程快 機制 優化 柔性數組 Redis reactor_io 多線程網絡模型 存儲結構 key-value鍵值對通過 hash 的方式存儲到數組中value 主要…

langchain4j中使用milvus向量數據庫做RAG增加索引

安裝milvus向量數據庫 官方網址 https://milvus.io/zh 使用docker安裝milvus mkdir -p /data/docker/milvus cd /data/docker/milvus wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh#在docker中啟動milvus sh standalone_emb…

UE5.3 C++ 房屋管理系統(一)

一.框架思路 1.如何加載。房屋管理&#xff0c;既然管理。就存在動態加載&#xff0c;和靜態加載的考慮。如果是靜態加載&#xff0c;就是在編輯器情況下放置&#xff0c;但這樣方便了擺放&#xff0c;但管理就需要在開始是將所有的房屋找到加到管理者里。你無法決定拖入場景的…

4.1【LLaMA-Factory 實戰】醫療領域大模型:從數據到部署的全流程實踐

【LLaMA-Factory實戰】醫療領域大模型&#xff1a;從數據到部署的全流程實踐 一、引言 在醫療AI領域&#xff0c;構建專業的疾病診斷助手需要解決數據稀缺、知識專業性強、安全合規等多重挑戰。本文基于LLaMA-Factory框架&#xff0c;詳細介紹如何從0到1打造一個垂直領域的醫…

解決LangChain4j報錯HTTP/1.1 header parser received no bytes

問題描述 當使用langchain4j-open-ai調用自己部署的大模型服務時報錯&#xff1a; public static void main(String[] args) {OpenAiChatModel model OpenAiChatModel.builder().apiKey("none").modelName("qwen2.5-instruct").baseUrl("http://19…

阿里云codeup以及本地gitclone+http

cmd命令行亂碼問題、解決 chcp 65001 git代碼提交 git add . git commit -m init git push origin master

2025.05.07-淘天算法崗-第二題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 02. 完美拼圖挑戰 問題描述 A先生是一位拼圖愛好者,他有兩種形狀的拼圖塊: a a a

Spring Boot中Redis序列化配置詳解

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 引言 在使用Spring Boot集成Redis時&#xff0c;序列化方式的選擇直接影響數據存儲的效率和系統兼容性。默認的JDK序列化存在可讀性差、存儲空間大等問題&am…

紫禁城多語言海外投資理財返利源碼帶前端uniapp純工程文件

測試環境&#xff1a;Linux系統CentOS7.6、寶塔、PHP7.2、MySQL5.6&#xff0c;根目錄public&#xff0c;偽靜態thinkphp&#xff0c;開啟ssl證書 語言&#xff1a;中文簡體、英文、越南語、馬來語、日語、巴西語、印尼語、泰語 前端是uniapp的源碼&#xff0c;我已經把nmp給你…

搭建大數據學習的平臺

一、基礎環境準備 1. 硬件配置 物理機&#xff1a;建議 16GB 內存以上&#xff0c;500GB 硬盤&#xff0c;多核 CPU虛擬機&#xff1a;至少 3 臺&#xff08;1 主 2 從&#xff09;&#xff0c;每臺 4GB 內存&#xff0c;50GB 硬盤 2. 操作系統 Ubuntu 20.04 LTS 或 CentOS…