广告
返回顶部
首页 > 资讯 > 精选 >kotlin中::双冒号如何使用
  • 306
分享到

kotlin中::双冒号如何使用

2023-07-06 04:07:36 306人浏览 薄情痞子
摘要

这篇文章主要介绍“Kotlin中::双冒号如何使用”,在日常操作中,相信很多人在kotlin中::双冒号如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”kotlin中::双冒号如何使用”的疑惑有所帮助!

这篇文章主要介绍“Kotlin中::双冒号如何使用”,在日常操作中,相信很多人在kotlin中::双冒号如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”kotlin中::双冒号如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、:: 双冒号操作符

在 Kotlin 中 , :: 双冒号操作符 的作用是 获取 类 , 对象 , 函数 , 属性 的 类型对象 引用 ;

获取的这些引用 , 并不常用 , 都是在 Kotlin 反射操作时才会用到 ;

相当于 Java 中的 反射 类的 字节码类型 Class 类型 , 对象的类型 Class 类型 , 对象的函数 Method 类型 , 对象的属性字段 Field 类型 ;

1、获取类的引用

在 Kotlin 中 , 使用 :: 双冒号操作符 获取 类的类型对象引用 代码格式为 :

Java或Kotlin类名::class

获取的 Kotlin 类 的 类型对象 的类型 为 KClass<类名> , 如 : 获取 String 字符串类型的引用 , 代码为 :

String::class

获取的 String 类的引用类型 为 KClass ,

代码示例 : 下面的代码中 , 通过 Student::class 获取的 引用对象的类型 是 KClass ;

import kotlin.reflect.KClassclass 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 语言中的字节码类 , java.lang.Class 是 Java 语言的字节码类 ;

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

package kotlin.reflectpublic actual interface KClass<T : Any> : KDeclarationContainer, KAnnotatedElement, KClassifier {        public actual val simpleName: String?        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、获取函数的引用

调用 类名::函数名 获取的 函数类型 引用 , 其类型是函数类型的 , 如下代码中 ,

调用 Student::info 获取的函数类型变量 的 类型为 (Student) -> Unit , 该函数引用 可以直接调用 invoke 函数执行对应的 被引用函数 ;

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)}

执行结果如下 :

kotlin中::双冒号如何使用

4、获取属性的引用

如下代码中 , 使用 Student::name 代码 , 获取 Student 类的 name 属性类型为 KMutableProperty1<Student, String> , 获取到该 name 属性的引用 , 相当于 Java 反射中的 Field 对象 , 调用 KMutableProperty1#get 函数 传入 Student 实例对象 , 可以获取该实例对象的 name 属性 ;

import kotlin.reflect.KMutableProperty1class 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))}

kotlin中::双冒号如何使用

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

KClass 是 Kotlin 类的 引用类型 , 是 Kotlin 类的实例对象 , 通过 类名::class 可以获取 KClass 引用 ;

KClass 提供了关于 Kotlin 类的一系列功能 , 包括 :

  • 获取类的简单名称

  • 获取类的完整名称

  • 创建类的实例对象

  • 获取类的成员字段和方法

  • 获取类的继承关系

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

与 KClass 相对的是 Java 中的 Class 类 , 是 Java 中的 类的 引用类型 ;

  • 在 Java 语言中 , 需要通过 类名.class 获取 Class 实例对象 ;

  • 在 Kotlin 语言中 , 需要通过类名::class.java 获取 Class 实例对象 ;

Class 提供了关于 Java 类的一系列功能 , 包括 :

  • 获取类的 注解

  • 获取类的 继承关系

  • 获取类的 成员字段和方法

代码示例 :

import kotlin.reflect.KClassimport kotlin.reflect.KProperty0import kotlin.reflect.KProperty1class 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

到此,关于“kotlin中::双冒号如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: kotlin中::双冒号如何使用

本文链接: https://www.lsjlt.com/news/357689.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • kotlin中::双冒号如何使用
    这篇文章主要介绍“kotlin中::双冒号如何使用”,在日常操作中,相信很多人在kotlin中::双冒号如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”kotlin中::双冒号如何使用”的疑惑有所帮助!...
    99+
    2023-07-06
  • kotlin 中双冒号 :: 的用法
    在Kotlin中,::是一个操作符,它可以用来引用函数、属性或构造函数。具体用法如下: 引用函数:可以使用::操作符来引用一个函数。例如,::println可以用来引用println函数。 fun printWithPrefix(prefi...
    99+
    2023-10-07
    kotlin android 开发语言
  • kotlin中,::双冒号的使用详解
    一、:: 双冒号操作符 在 Kotlin 中 , :: 双冒号操作符 的作用是 获取 类 , 对象 , 函数 , 属性 的 类型对象 引用 ; 获取的这些引用 , 并不常用 , 都是在 Kotlin ...
    99+
    2023-10-02
    kotlin android java
  • 详解kotlin中::双冒号的使用
    目录一、:: 双冒号操作符1、获取类的引用2、获取对象类型的引用3、获取函数的引用4、获取属性的引用二、 java.lang.Class 与 kotlin.reflect.KClas...
    99+
    2023-05-16
    kotlin::双冒号 kotlin::双冒号使用 kotlin双冒号
  • php中的双冒号如何使用
    这篇文章主要介绍“php中的双冒号如何使用”,在日常操作中,相信很多人在php中的双冒号如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中的双冒号如何使用”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-29
  • C++双冒号怎么使用
    这篇文章主要介绍了C++双冒号怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++双冒号怎么使用文章都会有所收获,下面我们一起来看看吧。一、作用域符号:作用域符号 :: 的前面一般是类名称,后面一般是该...
    99+
    2023-07-05
  • Java中双冒号: :的作用
    一、定义 双冒号运算操作符是类方法的句柄,lambda表达式的一种简写 表达式:person -> person.getName();可以替换成:Person::getName表达式:() -> new HashMap();可以替换成:...
    99+
    2023-09-22
    jvm java Powered by 金山文档
  • Java双冒号(::)运算符使用详解
    目录1.说明2.先来说下@FunctionalInterface3. 下面来讲讲这个 "::"是干嘛的4. 建立一个Person类4:构建多个person对象,放入数组中,然后对数组...
    99+
    2022-11-12
  • php中双冒号的用法是什么
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php中双冒号的用法是什么双冒号操作符:即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法。用变量访问...
    99+
    2014-08-06
    PHP
  • C++中双冒号::用法案例详解
    C++中的双冒号 :: 第一种,类作用域,用来标明类的变量、函数 Human::setName(char* name); 第二种,命名空间作用域,用来注明...
    99+
    2022-11-12
  • 使用@Cacheable缓存解决双冒号::的问题
    目录@Cacheable缓存解决双冒号::Cacheable的使用总结常规使用方法@Cacheable缓存解决双冒号:: 使用spring-data-redis2.x版本时,@Cac...
    99+
    2022-11-12
  • 怎么使用@Cacheable缓存解决双冒号的问题
    本篇内容主要讲解“怎么使用@Cacheable缓存解决双冒号的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用@Cacheable缓存解决双冒号的问题”吧!@Cacheable缓存解决...
    99+
    2023-06-22
  • Kotlin的::符号如何使用
    这篇文章主要讲解了“Kotlin的::符号如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kotlin的::符号如何使用”吧!传递函数优化这里我们举个栗子,就看这个熟悉的sortBy排...
    99+
    2023-06-29
  • 怎么使用Java中的问号与冒号
    这篇文章主要介绍了怎么使用Java中的问号与冒号,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数...
    99+
    2023-06-14
  • php如何去除中文冒号
    这篇“php如何去除中文冒号”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何去除中文冒号”文章吧。在php中,可以利...
    99+
    2023-06-29
  • php如何替换中文冒号
    这篇文章主要介绍了php如何替换中文冒号的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何替换中文冒号文章都会有所收获,下面我们一起来看看吧。php替换中文冒号的方法:1、使用str_ireplace()...
    99+
    2023-06-29
  • VUe双中括号属性如何使用
    Vue是一种流行的JavaScript框架,它使用双花括号(“{{”和“}}”)语法来实现属性与视图之间的数据绑定。VUe框架中的模板显示了被框架监控的变量的特定属性,当这些变量的值改变时,这些属性也跟随改变,从而在视图中自动更新相应的值。...
    99+
    2023-05-25
  • html5中是否使用双引号
    这篇文章主要介绍了html5中是否使用双引号,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。是否使用双引号这有点让人纠结,HTML 5并不是XTHML,你可以省去标签中的双引号...
    99+
    2023-06-27
  • C语言单引号与双引号如何使用
    今天小编给大家分享一下C语言单引号与双引号如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、单引号和双引号C语言中的...
    99+
    2023-06-30
  • SQL语句的单引号与双引号如何使用
    本文小编为大家详细介绍“SQL语句的单引号与双引号如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL语句的单引号与双引号如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.假如有下述表格myta...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作