文章目錄
- 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. val
和 var
- 作用:用于聲明變量。
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特有的關鍵字為開發者提供了更豐富、靈活的編程方式,使得代碼更加簡潔、易讀和高效。