文章目录 一、:: 双冒号操作符 1、获取类的引用 引用类型 KClass 说明 2、获取对象类型的引用 3、获取函数的引用 4、获取属性的引用 二、 java.lang.Class 与 kotlin.reflect.KClass...一、:: 双冒号操作符 ---- 在 Kotlin 中 , :: 双冒号操作符 的作用是 获取 类 , 对象 , 函数 , 属性 的 类型对象 引用 ; 获取的这些引用 , 并不常用 , 都是在 Kotlin...1、获取类的引用 在 Kotlin 中 , 使用 :: 双冒号操作符 获取 类的类型对象引用 代码格式为 : Java或Kotlin类名::class 获取的 Kotlin 类 的 类型对象 的类型...} 2、获取对象类型的引用 在 Kotlin 中 , 使用 :: 双冒号操作符 获取 对象类型的引用 代码格式为 : Java或Kotlin实例对象::class 获取的 对象类型的引用 的类型 为 KClass...---- KClass 是 Kotlin 类的 引用类型 , 是 Kotlin 类的实例对象 , 通过 类名::class 可以获取 KClass 引用 ; KClass 提供了关于 Kotlin 类的一系列功能
--------------------------------------- Java中数据类型的分类: 基本数据类型:4类8种。...byte、short、int(整数默认)、long、float、double(小数默认)、char、boolean 引用数据类型:类、接口、数组、字符串、Lambda等等。 ...注意:字符串、Lambda这两种引用数据类型后面会学习到。 --------------------------------------- Java中如何使用引用数据类型中的类呢?...如果希望使用引用类型中的“类”,那么典型用法的一般步骤为: 例如:使用Java中JDK已经写好的扫描器类 Scanner。 步骤1:导包。 指定需要使用的目标在什么位置。...导入到类的级别。
String 等类型进行内容比较,相当于 Java 中的 equals === :对引用的内存地址进行比较,相当于 Java 中的 == 如果每个类型都去实现诸如 TextViewList、ActivityList...作用域中使用 this 作为参数,选择 run 作用域中使用 it 作为参数,选择 let apply 适合对一个对象做附加操作的时候 let 适合配合空判断的时候 with 适合对同一个对象进行多次操作的时候...协程就是kotlin官方提供的线程api 属性委托 有些常见的属性操作,我们可以通过委托方式,让它实现,例如:lazy 延迟属性: 值只在第一次访问的时候计算 类委托 可以通过类委托来减少 extend...::class 获取的是 Kotlin 的类型是 KClass 使用 类名::class.java 获取的是 Java 的类型 Any Kotlin 的顶层父类是 Any ,对应 Java....this」 获取目标类引用 在 Kotlin 中通过「this@类名」获取目标类引用
因为这其实是个假的调用,它是 Kotlin 的语法糖,实际上你对一个函数类型的对象加括号、加参数,它真正调用的是这个对象的 invoke() 函数 双冒号 :: 创建一个函数引用或者一个类引用 函数引用...如果我们需要使用类的成员函数或扩展函数,它需要是限定的,例如 String::toCharArray。...val c = MyClass::class 该引用是 KClass 类型的值 请注意,Kotlin 类引用与 Java 类引用不同。...当对一个对象调用这样的函数并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些函数称为作用域函数。...这些函数基本上做了同样的事情:在一个对象上执行一个代码块。不同的是这个对象在块中如何使用,以及整个表达式的结果是什么。
并且,Kotlin还提供了智能的类型判断功能,使用is类型判断后,编译器自动进行类型转换,父类引用可以调用子类接口,注意转换只在is的代码块中生效。...Kotlin是如何兼容Java的 都是Kotlin可以100%的兼容Java,那么Kotlin又是如何兼容Java的呢?下面是Kotlin的一个编译流程图。...变量类型可以根据变量值进行自动推导,这里Kotlin的基础类型都是对象,使用的是Java的包装类(基础类型包装成对象)。...伴生对象的调用跟Java一样,通过类名.属性名称或函数名称调用。 新特性 1,空安全 在Kotlin中,对象声明分为可空引用和非空引用两种。...枚举类扩展 6.2 扩展 6.2.1 扩展的动机 6.2.2 扩展原生函数 6.2.3 静态解析 6.2.4 扩展属性 6.2.5 扩展伴生对象 6.2.6 扩展的作用域 6.2.7 类中声明扩展 6.3
自从2017年Google宣布Kotlin成为Android官方开发语言之后,Kotlin受到广大Android开发者的追捧。...Kotlin能够扩展一个类的新功能,这个扩展是无痕的,即我们无需继承该类或使用像装饰者的设计模式,同时这个扩展对使用者来说也是透明的,即使用者在使用该类扩展功能时,就像使用这个类自身的功能一样的。...从这个方法的定义我们可以看到,这个方法是对Any类进行扩展,而接收者类型后面加了个?号,所以准确来说,是对Any?类进行扩展。...考虑下面四种场景: 在变量定义中,代表变量的类型 在类定义中,代表基类的类型 在函数定义中,代表函数返回值的类型 在匿名对象中,代表对象的类型 笼统来说,Kotlin的设计者应该就是想用冒号来笼统表示类型这一概念...可以通过使用类型别名给函数类型起一个别称: ? 函数对象最大的作用是可以轻易地实现回调,而不需要像Java那样通过代理类才可以做到。
,甚至已经运用到了自己的项目当中,但是还有较多同学可能只是听过Kotlin或简单了解过,这篇文章的目的是让这些同学对Kotlin有一个系统全面的认识,让有兴趣的同学在之后学习的时候能更加的轻车熟路。...类型智能转换:通过is进行类型判断后,编译器自动进行类型转换。父类引用可以调用子类接口,注意转换只在is的代码块中生效。...变量类型可以根据变量值进行自动推导。这里Kotlin的基础类型都是对象,使用的是Java的包装类(基础类型包装成对象)。 2、定义函数 [3.png] 函数使用fun为关键字进行声明。...[16.png] ----- 二、新特性 1、空安全 Kotlin是如何实现空安全的呢? 在Kotlin中,对象声明分为可空引用和非空引用两种。...[20.png] 我们在任意Activity中都可以直接调用 [21.png] 函数扩展并不是修改了原来的类,通过反编译成Java代码可以发现,函数的扩展是通过静态导入的方式实现的。
中的List容器类,这里在声明里作为“接受者类型”,.作为声明关键字,swap是扩展函数名,其余和Kotlin声明一个普通函数并无区别。...有必要探究一下Kotlin是如何实现扩展函数的,直接分析Kotlin源码难度还是挺大,还好Android Studio提供了一些工具,我们可以通过Kotlin ByteCode指令,查看Kotlin语言转换的字节码文件...3.5 如果留意前面的例子,我们会发现kotlin的this语法和JAVA不同,使用范围更灵活,仅以扩展函数为例,当在扩展函数里调用this时,指代的是接受者类型的实例,那么如果这个扩展函数声明在一个类内部...,我们如何通过this获取到类的实例呢?...()是一个定义在类G内部的扩展函数,在这个扩展函数里,我们直接使用Int类型作为接受者类型,因为我们将扩展函数定义在了类的内部,即使我们设置访问权限为public,它也只能在该类或者该类的子类中被访问,
通过它,您无需使用继承,或创建接收类实例的函数即可为某个类添加功能。同 Java 这类编程语言不同,Android Studio 的自动补全功能是支持 Kotlin 扩展的。...扩展可以用于第三方代码库、Android SDK 以及用户自定义的类。 继续阅读,探索如何通过扩展来提升您的代码可读性。...在函数体中,您可以使用 this 来引用接收者对象,在该函数作用域内能够访问到接收者所属类的全部成员对象。
DSL包(但不是它们的子包)中相应API文档中列出的类型扩展了Gradle公共API。 类型安全模型访问器 Groovy DSL允许您通过名称引用构建模型的许多元素,即使它们是在运行时定义的。...项目扩展和约定 项目扩展和约定都有名称和唯一的类型,但是Kotlin DSL只需要知道类型就可以配置它们。...此外,Kotlin DSL提供了几种选择Groovy语义的方法,我们接下来将讨论这一点 静态键入扩展 Groovy和Kotlin语言都支持通过Groovy Extension模块和Kotlin扩展现有类...(receiver, "parameters", 42, aReference) Copy Kotlin扩展函数是包级函数,您可以在Kotlin参考文档的包级函数一节中了解如何定位声明给定Kotlin扩展的类型的名称...KotlinClosure0到KotlinClosure2类型允许将Kotlin函数更灵活地适应Groovy闭包。
比如,Kotlin 元数据可以告诉 Kotlin 编译器类文件中的一个方法实际上是 Kotlin 扩展函数。...(true).build() R8 过去是如何破坏 Kotlin 开发库的 正如前文所提到的,为了能够在库中使用 Kotlin API,Kotlin 的元数据非常重要,然而,元数据存在于注解中,并且会以...这完全说得通,因为没有了元数据,Kotlin 编译器唯一能看到的就是一个包含两个参数的 Java 静态方法。 保留原始的元数据也同样会出问题。首先 Kotlin 元数据中所保留的类是父类的类型。...此外,所保留的类的 Kotlin 元数据也被重写,这样所有对于 CommandBuilderBase 的引用都被替换为对 a 的引用。这样开发库就可以正常使用了。...开发库的作用。
因为这些方便的东西如果太多,就会变成对你和同事的打扰。 扩展函数的写法 扩展函数写在哪都可以,但写的位置不同,作用域就也不同。所谓作用域就是说你能在哪些地方调用到它。...但是……用谁的类名?是这个函数所属的类名,还是它的 Receiver 的类名?这是有歧义的,所以 Kotlin 就干脆不许我们引用既是成员函数又是扩展函数的函数了,一了百了。...在 Kotlin 里,每一个有 Receiver 的函数——其实就是成员函数和扩展函数——它的引用都可以赋值给两种不同的函数类型变量:一种是有 Receiver 的,一种是没有 Receiver 的:...不过我还是要把这个告诉你,因为这样你的知识体系才是完整的。 说到完整啊,每个做 Android 的人都应该把自己的支撑体系扩充一下,让自己的技能树变完整,你才能百毒不侵,工作和面试都不怕。...总结 这次讲的内容挺多的,但其实也很简单,主要就这么几点:扩展函数、扩展函数的引用、有无 Receiver 的函数类型的转换以及扩展属性。
对于Java,曾经借助Android这场春风,着实让迟暮的它再度辉煌,现在和将来在Android领域可谓是棋逢敌手,Java的在Android开发语言市场份额会降。...这种可为空的类型,使用Kotlin之后,我们程序的空指针会得到明显的改善。 3.实用,高效率。...Kotlin支持OOP(面向对象编程)和FP(函数式编程),语言本身并没有限制,给了我们选择的自由,Kotlin对FP的友好支持,便于我们写出更加稳定,易于测试,无副作用的方法和代码 5.可读性 从客观上...但是不得不指出代码可读性主要依赖编写者的编码素质和能力。 对我个人而言,高阶函数和方法扩展这两个特点着实真心受用。方法扩展会让我有一种创造感,这是Java种的Util方法所无法比拟的。...解决这个问题,还是需要多学习和思考 2.扩展方法的滥用,Kotlin 的扩展方法很好,我们可以扩展很多方法,弥补Framework的一些不完善,但是扩展时我们需要谨慎,一定要把合适的方法放到合适的类型上
Extensions 在Java中,要想扩展一个类,我们会写一堆Utils。 而在Kotlin中,我们可以直接对double对象进行扩展,再也不需要Utils的类了。...Generics 我们要创造一个协变的应用才能引用它子类的集合,与之对应的还有逆变。 在Kotlin里数组默认不是协变的。 ? 对于不可变集合是默认协变,可变集合默认是逆变的。...可以用扩展语法让代码更加可读。 Generics简单好用。...引入reified以后,可以把类型声明成reified,这样在函数题里就会引用到这个类型具体的Class。Kotlin有一定的类型推导功能。...Coroutines提高了异步代码的可读性。 Kotlin in Android 在Android上有一个常见的类叫做viewholder。 ?
这里添加了 Kotlin 对 Android 的扩展,同时也添加了 Kotlin 的 Gradle 插件。...2.2 与Java交互 Kotlin 的标准库更多的是对 Java 库的扩展,基于这个设计思路,你丝毫不需要担心 Kotlin 对 Java 代码的引用,你甚至可以在 Kotlin 当中使用 Java...3.3 扩展类 扩展类,就是在现有类的基础上,添加一些属性或者方法,当然扩展的这些成员需要导入当前扩展成员所在的包才可以访问到。下面给出一个例子: ?...在扩展成员当中,只能访问被扩展类在当前作用域内可见的成员,本例中的x 和 y 都是 public 的(Kotlin 默认 public,这个我们后面会提到),所以可以在扩展方法和属性中直接访问。...为了让大家印象深刻,我下面给出类似功能的 Java 的代码实现: ? 而你如果说希望在 Java 中也希望像下面这样拿到这个泛型参数的类型,是不可以的: ?
希望能及时让大家了解一下Kotlin。 相信很多开发人员,尤其是Android开发者都会或多或少听说过Kotlin,当然如果没有听过或者不熟悉也没有关系。...注意:Kotlin的方法扩展并不是真正修改了对应的类文件,而是在编译器和IDE方面做得处理。使我们看起来像是扩展了方法。...利用Kotlin中的高阶函数的功能,我们能更好的解决这个问题 当然这上面的例子中我们也同时使用了方法扩展这个特性。 Kotlin支持了Streams API和方法引用,这样函数式编程更加方便。...Kotlin和Java的交互性很好,可以说是无缝连接。这表现在 Kotlin可以自由的引用Java的代码,反之亦然。...而比较难抉择的情况是如果如何让团队转用Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。
var 和 val 的区别? Kotlin 中默认参数的作用以及原理? Kotlin 中顶层函数的原理 中缀函数是什么?注意点? 解构函数的本质? 扩展函数的本质? 扩展函数和成员函数的区别?...Kotlin 中常用的类的修饰符有哪些? Kotlin 中可见性修饰符有哪些? Kotlin 中的内部类和 Java 中的内部类有什么不同? Kotlin 属性代理背后原理? ............Android 扩展知识点 ART Apk 包体优化 Hook Proguard 架构 Jetpack NDK 开发 计算机网络基础 类加载器 ............Minar GC 和 Full GC 的区别? 说一下四种引用以及他们的区别? 类加载的过程? 类加载的机制,以及为什么要这样设计? ............JNI 模块专题 静态注册 动态注册 数据类型映射 对象数组引用类型 jni 函数默认参数 jni 是如何访问 java 中的方法和字段 jni 访问 java 中的静态方法 jni 访问 java 中的字段
领取专属 10元无门槛券
手把手带您无忧上云