詳解 kotlin 相對 Java 特有的關鍵字及使用

文章目錄

      • 1. `val` 和 `var`
      • 2. `fun`
      • 3. `when`
      • 4. `is` 和 `!is`
      • 5. `lateinit`
      • 6. `by`
      • 7. `reified`
      • 8. `companion`

本文首發地址:https://h89.cn/archives/366.html
最新更新地址:https://gitee.com/chenjim/chenjimblog

Kotlin 在兼容Java的基礎上,引入了許多特有的關鍵字,這些關鍵字為Kotlin帶來了簡潔、高效的編程體驗。以下詳細介紹一些Kotlin特有的關鍵字及其使用:

1. valvar

  • 作用:用于聲明變量。val 聲明的是不可變變量(類似于Java中的 final 變量),一旦賦值后不能再更改;var 聲明的是可變變量。
  • 示例
    val name: String = "John"
    // name = "Jane" // 這行代碼會報錯,因為val聲明的變量不可變var age: Int = 30
    age = 31
    

2. fun

  • 作用:用于定義函數。與Java相比,Kotlin的函數定義語法更加簡潔,參數類型在參數名之后聲明。
  • 示例
    fun greet(name: String): String {return "Hello, $name!"
    }// 單表達式函數
    fun square(x: Int): Int = x * x
    

3. when

  • 作用:替代Java中的 switch - case 語句,功能更強大,不僅可以用于基本類型,還可以用于對象、范圍等,并且支持更靈活的條件判斷。
  • 示例
    val number = 2
    val result = when (number) {1 -> "One"2 -> "Two"else -> "Other"
    }// 使用范圍匹配
    val age = 25
    val ageGroup = when (age) {in 0..12 -> "Child"in 13..19 -> "Teenager"else -> "Adult"
    }// 使用對象類型匹配
    fun describe(obj: Any): String =when (obj) {is String -> "It's a string with length ${obj.length}"is Int -> "It's an integer"else -> "I don't know what it is"}
    

4. is!is

  • 作用:用于類型檢查。is 檢查對象是否為指定類型,!is 則相反。
  • 示例
    fun printType(obj: Any) {if (obj is String) {println("It's a string: $obj")} else if (obj!is Int) {println("It's not an integer")}
    }
    

5. lateinit

  • 作用:用于聲明一個非空類型的變量,但延遲初始化。這在變量無法在聲明時初始化,但又不想使用可空類型的情況下很有用,比如在Android開發中,一些視圖變量在 onCreate 方法中通過 findViewById 初始化。
  • 示例
    lateinit var myTextView: TextViewfun setupView() {myTextView = findViewById(R.id.my_text_view)myTextView.text = "Hello"
    }
    

6. by

  • 作用:用于委托屬性和委托類。通過委托,一個類可以將部分功能委托給另一個類來實現,使代碼更簡潔、復用性更高。
  • 示例
    • 委托屬性

      class User {var name: String by Delegates.notNull()
      }fun main() {val user = User()user.name = "Alice"println(user.name)
      }
      
    • 委托類

      interface MyInterface {fun doSomething()
      }class MyImplementation : MyInterface {override fun doSomething() {println("Doing something")}
      }class MyDelegator(myImplementation: MyImplementation) : MyInterface by myImplementationfun main() {val delegator = MyDelegator(MyImplementation())delegator.doSomething()
      }
      

7. reified

  • 作用:用于內聯函數中,使我們能夠在運行時獲取泛型參數的實際類型。在Java中,泛型類型在運行時會被擦除,而 reified 關鍵字可以解決這個問題。
  • 示例
    inline fun <reified T> printType() {println("The type is ${T::class.simpleName}")
    }fun main() {printType<String>()
    }
    

8. companion

  • 作用:用于在類中定義伴生對象。伴生對象類似于Java中的靜態成員,但功能更強大。它可以包含屬性和方法,并且可以訪問類的私有成員。
  • 示例
    class MyClass {private val privateValue = 42companion object {fun create(): MyClass {return MyClass()}val companionValue = 10}
    }fun main() {val myObject = MyClass.create()println(MyClass.companionValue)
    }
    

這些Kotlin特有的關鍵字為開發者提供了更豐富、靈活的編程方式,使得代碼更加簡潔、易讀和高效。

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

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

相關文章

國標GB28181視頻平臺EasyCVR如何搭建汽車修理廠遠程視頻網絡監控方案

一、背景分析 近年我國汽車保有量持續攀升&#xff0c;與之相伴的汽車保養維修需求也逐漸提高。隨著社會經濟的發展&#xff0c;消費者對汽車維修服務質量的要求越來越高&#xff0c;這使得汽車維修店的安全防范與人員管理問題面臨著巨大挑戰。 多數汽車維修店分布分散&#…

linux RCU技術

RCU&#xff08;Read-Copy-Update&#xff09;是Linux內核中的一種同步機制&#xff0c;用于在多核處理器環境中實現無鎖讀取和延遲更新。Linux RCU&#xff08;Read-Copy-Update&#xff09;技術通過一種高效的同步機制來處理并發沖突&#xff0c;確保在多核環境中讀者和寫者對…

【筆記ing】AI大模型-02開發環境搭建

按實驗需求合理選用實例規格&#xff0c;一般&#xff1a;模型開發階段&#xff1a;使用最低算力2U8GB CPU。訓練或推理階段&#xff1a;切換至GPU規格&#xff0c;用完及時關閉算力環境&#xff0c;且切回最低算力規格。 每次實驗結束手動關閉實例。使用ModelArts公有云資源。…

Python——numpy測試題目

題目&#xff1a; 生成一個2行3列隨機整數二維數組a使用Numpy方法對&#xff08;1&#xff09;中數組a進行整體求積使用Numpy方法對&#xff08;1&#xff09;中數組a進行求每列最大值索引定義一個NumPy一維數組 b&#xff0c;元素為 1 到 10 的整數獲取&#xff08;4&#x…

系分論文《論面向服務開發方法在設備租賃行業的應用》

系統分析師論文系列 【摘要】 2022年5月&#xff0c;我司承接某工程機械租賃企業"智能租賃運營管理平臺"建設項目&#xff0c;我作為系統分析師主導系統架構設計。該項目需整合8大類2000余臺設備資產&#xff0c;覆蓋全國15個區域運營中心與300家代理商&#xff0c;實…

Unity UI中的Pixels Per Unit

Pixels Per Unit在圖片導入到Unity的時候&#xff0c;將圖片格式設置為Sprite的情況下會出現&#xff0c;其意思是精靈中的多少像素對應世界中的一個單位&#xff0c;默認是100 1. 對于在世界坐標中 在世界坐標中&#xff0c;一般對于Sprite的應用是Sprite Renderer組件 使…

Boost Graph Library (BGL) 介紹與使用示例

Boost Graph Library (BGL) 介紹與使用示例 Boost Graph Library (BGL) 是 Boost 庫中用于圖論計算的模塊&#xff0c;提供了處理圖數據結構的通用接口和多種圖算法實現。 BGL 主要特性 提供多種圖表示方式&#xff1a;鄰接表、鄰接矩陣等包含常用圖算法&#xff1a;DFS、BF…

opencv(C++)操作圖像像素

文章目錄 添加噪點的案例圖像像素值1、訪問圖像屬性2、像素訪問方法 at灰度圖像彩色圖像 3、OpenCV 的向量類型4、 圖像傳遞方式 The cv::Mat_ 類1、作用及優點2、使用 cv::Mat_ 簡化像素訪問 用指針掃描圖像背景算法案例原理1. 圖像數據存儲的基本結構2、行填充&#xff08;Pa…

Python實現貪吃蛇一

貪吃蛇是一款經典的小游戲&#xff0c;最近嘗試用Python實現它。先做一個基礎版本實現以下目標&#xff1a; 1、做一個按鈕&#xff0c;控制游戲開始 2、按Q鍵退出游戲 3、右上角顯示一個記分牌 4、隨機生成一個食物&#xff0c;蛇吃到食物后長度加一&#xff0c;得10分 5、蛇碰…

《AI大模型應知應會100篇》第13篇:大模型評測標準:如何判斷一個模型的優劣

第13篇&#xff1a;大模型評測標準&#xff1a;如何判斷一個模型的優劣 摘要 近年來&#xff0c;大語言模型&#xff08;LLMs&#xff09;在自然語言處理、代碼生成、多模態任務等領域取得了顯著進展。然而&#xff0c;隨著模型數量和規模的增長&#xff0c;如何科學評估這些模…

工會考試重點內容有哪些:核心考點與備考指南

工會考試重點內容總結&#xff1a;核心考點與備考指南 工會考試主要考察考生對工會法律法規、職能職責、實務操作等內容的掌握程度&#xff0c;適用于企事業單位工會干部、社會化工會工作者等崗位的選拔。本文梳理工會考試的核心考點&#xff0c;幫助考生高效備考。 一、工會…

Verilog學習-1.模塊的結構

module aoi(a,b,c,d,f);/*模塊名為aoi&#xff0c;端口列表a、b、c、d、f*/ input a,b,c,d;/*模塊的輸入端口為a,b,c,d*/ output f;;/*模塊的輸出端口為f*/ wire a,b,c,d,f;/*定義信號的數據類型*/ assign f~((a&b)|(~(c&d)));/*邏輯功能描述*/ endmoduleveirlog hdl 程…

MySQL數據庫備份與恢復詳解

在數據庫管理中&#xff0c;數據的備份與恢復是至關重要的一環。對于MySQL數據庫&#xff0c;定期備份不僅能防止數據丟失&#xff0c;還能在發生故障時快速恢復數據庫。本文將詳細介紹MySQL數據庫的備份與恢復方法&#xff0c;覆蓋所有常用備份和恢復方式&#xff0c;幫助大家…

FFMPEG和opencv的編譯

首先 sudo apt-get update -qq && sudo apt-get -y install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libgnutls28-dev libmp3lame-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-de…

華為機試—最大最小路

題目 對于給定的無向無根樹&#xff0c;第 i 個節點上有一個權值 wi? 。我們定義一條簡單路徑是好的&#xff0c;當且僅當&#xff1a;路徑上的點的點權最小值小于等于 a &#xff0c;路徑上的點的點權最大值大于等于 b 。 保證給定的 a<b&#xff0c;你需要計算有多少條簡…

spring cloud微服務開發中聲明式服務調用詳解及主流框架/解決方案對比

聲明式服務調用詳解 1. 核心概念 定義&#xff1a;通過配置或注解聲明服務調用邏輯&#xff0c;而非手動編寫客戶端代碼&#xff0c;提升開發效率與可維護性。核心特性&#xff1a; 解耦&#xff1a;調用邏輯與業務代碼分離內置容錯&#xff1a;熔斷、超時、重試等動態發現&am…

基于springboot+vue的秦皇島旅游景點管理系統

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系統展示 用戶登錄 旅游路…

【數據結構】之二叉樹

二叉樹是我們在數據結構中學到的第一個非線性結構&#xff0c;是后續學習更為復雜的樹、圖結構的基礎。本文整理了二叉樹的概念定義、基本操作、遍歷算法、偽代碼與代碼實現以及實例說明&#xff0c;方便大家隨時查找對應。 一、定義與基本術語 二叉樹是一種樹形結構&#xf…

Honeyview:快速瀏覽各類圖像

Honeyview是一款免費、輕量級圖片查看工具?&#xff0c;專為快速瀏覽各類圖像設計&#xff0c;支持Windows系統?。其核心優勢在于?極速加載?與?廣泛格式兼容性?&#xff0c;可替代系統自帶的圖片查看工具&#xff0c;尤其適合需要處理專業圖像&#xff08;如PSD、RAW&…

Streamlit性能優化:緩存與狀態管理實戰

目錄 &#x1f4cc; 核心特性 &#x1f4cc; 運行原理 &#xff08;1&#xff09;全腳本執行 &#xff08;2&#xff09;差異更新 &#x1f4cc; 緩存機制 ?為什么使用緩存&#xff1f; 使用st.cache_data的優化方案 緩存適用場景 使用st.session_state的優化方案 &…