亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解kotlin中::雙冒號的使用

 更新時間:2023年04月14日 15:17:56   作者:不入流Android開發(fā)  
在?Kotlin?中?,?::?雙冒號操作符?的作用是獲取類,對象,函數(shù),屬性的?類型對象引用,這篇文章主要介紹了詳解kotlin中::雙冒號的使用,需要的朋友可以參考下

一、:: 雙冒號操作符

在 Kotlin 中 , :: 雙冒號操作符 的作用是 獲取 類 , 對象 , 函數(shù) , 屬性 的 類型對象 引用 ;

獲取的這些引用 , 并不常用 , 都是在 Kotlin 反射操作時才會用到 ;

相當于 Java 中的 反射 類的 字節(jié)碼類型 Class 類型 , 對象的類型 Class 類型 , 對象的函數(shù) Method 類型 , 對象的屬性字段 Field 類型 ;

1、獲取類的引用

在 Kotlin 中 , 使用 :: 雙冒號操作符 獲取 類的類型對象引用 代碼格式為 :

Java或Kotlin類名::class

獲取的 Kotlin 類 的 類型對象 的類型 為 KClass<類名> , 如 : 獲取 String 字符串類型的引用 , 代碼為 :

String::class

獲取的 String 類的引用類型 為 KClass ,

代碼示例 : 下面的代碼中 , 通過 Student::class 獲取的 引用對象的類型 是 KClass ;

import kotlin.reflect.KClass

class Student {
    var name = "Tom"
    var age = 18

    fun info() {
        println("$name is $age years old")
    }
}

fun main() {
    val studentClassRef: KClass<Student> = Student::class
}

引用類型 KClass 說明

Kotlin 中 類的引用類型 KClass 中 提供了很多有用的屬性 , 如 :

  • public actual val simpleName: String? 屬性可以獲取類的簡單名稱 ;
  • public val qualifiedName: String? 屬性可以獲取類的完整名稱 ;

kotlin.reflect.KClass 是 Kotlin 語言中的字節(jié)碼類 , java.lang.Class 是 Java 語言的字節(jié)碼類 ;

下面是 KClass 的原型 , 省略了后面的代碼 ;

package kotlin.reflect

/**
 * 表示一個類并提供內(nèi)省功能。
 * 此類的實例可通過 `::class` 語法獲得。
 * 更多信息請參見 
 * [Kotlin 語言文檔]
 * (https://kotlinlang.org/docs/reference/reflection.html#class-references)。
 *
 * @param T 類的類型。
 */
public actual interface KClass<T : Any> : KDeclarationContainer, KAnnotatedElement, KClassifier {
    /**
     * 類在源代碼中聲明的簡單名稱,
     * 如果該類沒有名稱(例如,它是一個匿名對象文字),
     * 則為 `null`。
     */
    public actual val simpleName: String?

    /**
     * 類的全限定名稱,以點分隔符分隔,
     * 如果該類是本地類或匿名對象文字,則為 `null`。
     */
    public val qualifiedName: String?
}

2、獲取對象類型的引用

在 Kotlin 中 , 使用 :: 雙冒號操作符 獲取 對象類型的引用 代碼格式為 :

Java或Kotlin實例對象::class

獲取的 對象類型的引用 的類型 為 KClass<out 類名> , 如 : 獲取 String 字符串類型的引用 , 代碼為 :

"Tom"::class

獲取的 String 對象類型的引用 類型 為 KClass ,

在某種程度上 , 可以理解為 類的引用 等同于 對象的引用 ;

代碼示例 : 下面的代碼中 , 通過 var student: Student = Student() 實例對象 , 獲取的 引用對象類型的類型 是 KClass ;

import kotlin.reflect.KClass

class Student {
    var name = "Tom"
    var age = 18

    fun info() {
        println("$name is $age years old")
    }
}

fun main() {
    var student: Student = Student()
    val studentObjectRef: KClass<out Student> = student::class
}

3、獲取函數(shù)的引用

調(diào)用 類名::函數(shù)名 獲取的 函數(shù)類型 引用 , 其類型是函數(shù)類型的 , 如下代碼中 ,

調(diào)用 Student::info 獲取的函數(shù)類型變量 的 類型為 (Student) -> Unit , 該函數(shù)引用 可以直接調(diào)用 invoke 函數(shù)執(zhí)行對應(yīng)的 被引用函數(shù) ;

class Student {
    var name = "Tom"
    var age = 18

    fun info() {
        println("$name is $age years old")
    }
}

fun main() {
    var student: Student = Student()
    var studentInfo: (Student) -> Unit = Student::info
    studentInfo.invoke(student)
}

執(zhí)行結(jié)果如下 :

4、獲取屬性的引用

如下代碼中 , 使用 Student::name 代碼 , 獲取 Student 類的 name 屬性類型為 KMutableProperty1<Student, String> , 獲取到該 name 屬性的引用 , 相當于 Java 反射中的 Field 對象 , 調(diào)用 KMutableProperty1#get 函數(shù) 傳入 Student 實例對象 , 可以獲取該實例對象的 name 屬性 ;

import kotlin.reflect.KMutableProperty1

class Student {
    var name = "Tom"
    var age = 18

    fun info() {
        println("$name is $age years old")
    }
}

fun main() {
    var student: Student = Student()
    var studentName: KMutableProperty1<Student, String> = Student::name
    println(studentName.get(student))
}

二、 java.lang.Class 與 kotlin.reflect.KClass

KClass 是 Kotlin 類的 引用類型 , 是 Kotlin 類的實例對象 , 通過 類名::class 可以獲取 KClass 引用 ;

KClass 提供了關(guān)于 Kotlin 類的一系列功能 , 包括 :

  • 獲取類的簡單名稱
  • 獲取類的完整名稱
  • 創(chuàng)建類的實例對象
  • 獲取類的成員字段和方法
  • 獲取類的繼承關(guān)系

KClass 的全類名是 kotlin.reflect.KClass , Class 的全類名是 java.lang.Class ;

與 KClass 相對的是 Java 中的 Class 類 , 是 Java 中的 類的 引用類型 ;

  • 在 Java 語言中 , 需要通過 類名.class 獲取 Class 實例對象 ;
  • 在 Kotlin 語言中 , 需要通過類名::class.java 獲取 Class 實例對象 ;

Class 提供了關(guān)于 Java 類的一系列功能 , 包括 :

  • 獲取類的 注解
  • 獲取類的 繼承關(guān)系
  • 獲取類的 成員字段和方法

代碼示例 :

import kotlin.reflect.KClass
import kotlin.reflect.KProperty0
import kotlin.reflect.KProperty1

class Student {
    var name = "Tom"
    var age = 18

    fun info() {
        println("$name is $age years old")
    }
}

fun main() {
    // Student 實例對象
    var student: Student = Student()

    // kotlin.reflect.KClass
    var kClazz: KClass<Student> = Student::class

    // kotlin.reflect.KClass
    var studentClazz: KClass<out Student> = student::class

    // java.lang.Class
    var javaClass: Class<Student> = Student::class.java

    // java.lang.Class
    var studentJavaClazz: Class<out Student> = student::class.java

    // KProperty1<Student, Class<Student>>
    var javaClass2: KProperty1<Student, Class<Student>> = Student::javaClass

    // KProperty0<Class<Student>>
    var studentJavaClass2: KProperty0<Class<Student>> = student::javaClass

到此這篇關(guān)于kotlin中,::雙冒號的使用詳解的文章就介紹到這了,更多相關(guān)kotlin::雙冒號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Android實現(xiàn)手寫簽名

    Android實現(xiàn)手寫簽名

    這篇文章主要為大家詳細介紹了Android實現(xiàn)手寫簽名的具體實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android利用方向傳感器獲得手機的相對角度實例說明

    Android利用方向傳感器獲得手機的相對角度實例說明

    下面以實例向大家介紹喜愛Android利用方向傳感器獲得手機的相對角度,不了解的朋友可以參考下
    2013-06-06
  • Android選項菜單用法實例分析

    Android選項菜單用法實例分析

    這篇文章主要介紹了Android選項菜單用法,以完整實例形式較為詳細分析了Android選項菜單的布局及功能實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Convert WebP to PNG using java

    Convert WebP to PNG using java

    本文主要介紹Convert WebP to PNG using java,這里對 WebP 做了詳細說明,并講解Linux 環(huán)境下WebP 轉(zhuǎn)png格式的示例,有興趣的小伙伴可以參考下
    2016-08-08
  • 使用OkHttp包在Android中進行HTTP頭處理的教程

    使用OkHttp包在Android中進行HTTP頭處理的教程

    HTTP頭部處理是HTTP網(wǎng)絡(luò)編程中的基本操作,安卓中使用OkHttp包(github.com/square/okhttp)進行相關(guān)操作當然也是得心應(yīng)手,這里我們就來看一下使用OkHttp包在Android中進行HTTP頭處理的教程
    2016-07-07
  • 一文帶你搞清楚Android游戲發(fā)行切包資源ID那點事

    一文帶你搞清楚Android游戲發(fā)行切包資源ID那點事

    這篇文章主要介紹了Android 解決游戲發(fā)行切包資源ID的一些問題,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2023-05-05
  • Android實現(xiàn)購物車添加商品特效

    Android實現(xiàn)購物車添加商品特效

    這篇文章主要為大家詳細介紹了Android實現(xiàn)購物車添加商品特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android數(shù)字華容道小游戲開發(fā)

    Android數(shù)字華容道小游戲開發(fā)

    這篇文章主要為大家詳細介紹了Android數(shù)字華容道小游戲開發(fā)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Android中使用findViewByMe提升組件查找效率

    Android中使用findViewByMe提升組件查找效率

    本文主要介紹了Android中使用findViewByMe提升組件查找效率的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Android編程設(shè)計模式之觀察者模式實例詳解

    Android編程設(shè)計模式之觀察者模式實例詳解

    這篇文章主要介紹了Android編程設(shè)計模式之觀察者模式,結(jié)合實例形式詳細分析了Android觀察者模式的概念、功能、實現(xiàn)方法及相關(guān)使用注意事項,需要的朋友可以參考下
    2017-12-12

最新評論