![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kotlin
会写代码的吉他手
这个作者很懒,什么都没留下…
展开
-
加固APK之后Android12无法安装的问题
首先打包的时候不要去选zipAlignEnabledbuildTypes { release { minifyEnabled true useProguard true// zipAlignEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-opt原创 2022-03-25 21:56:17 · 3165 阅读 · 0 评论 -
ModelCache.safeGet(androidProjectResult.androidProject::getNdkVersion, ““) must not be null
在更新到Android Studio Bumblebee 版本之后,突然发现项目跑不起来了,报错如下:ModelCache.safeGet(androidProjectResult.androidProject::getNdkVersion, "") must not be null在网上找了好多资料,有说在gradle里面设置ndkVersion的,有说在local.properties里面设置ndk.dir的,也有说在Project Structure里面设置NDK的版本的,对我来说都没用。我原创 2022-02-14 15:31:02 · 3380 阅读 · 1 评论 -
关于Kotlin做组件化中遇到Unresolved reference:XXX的问题
具体场景是你又一个CommonLib,被主工程给依赖的,在调用CommonLib里面的资源或者类的时候出现了Unresolved reference:XXX,解决办法是在你的CommonLib的build.gradle里面添加:plugins { id 'kotlin-android' id 'kotlin-android-extensions'}或者:apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-ext原创 2021-12-17 10:24:43 · 2677 阅读 · 0 评论 -
Kotlin泛型和委托
在Java中泛型早就被用烂了,Kotlin中的泛型和Java的有一样的也有不一样的地方,准确来讲,我们需要给任何要个变量指定一个具体的类型,而泛型允许我们在不指定具体类型的情况下进行编程莫这样编写出来的代码将会有更好的扩展性。在Kotlin中我们定义一个泛型类:class MyClass<T> { fun method(param: T): T { return param }}MyClass就是一个泛型类,但如果我们不想定义一个泛型类,只想用一个泛型方法呢?clas原创 2020-11-24 22:27:41 · 135 阅读 · 0 评论 -
Kotlin内联函数
上一章学了下高阶函数,我们可以用Lambda表达式很好的使用高阶函数,现在来看看高阶函数的原理,要知道Kotlin文件最终都是被编译成Java字节码的,但是Java中并没有高阶函数这个概念,其实Kotlin的编译器会将这些高阶函数的语法转换成Java支持的那种,比如上次我们写的计算两个数的和和差的函数:fun main() { val result = calculate(1, 2) { num1, num2 -> num1 - num2 }}fun calculate(num1: I原创 2020-11-24 21:22:15 · 864 阅读 · 0 评论 -
Kotlin高阶函数
高阶函数:如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么这个函数就成为高阶函数。写习惯了Java的人可能就在想,编程语言中的参数有整型、字符串类型,布尔型等字段类型,怎么能接收一个函数作为参数呢?其实Kotlin新增了一个函数类型的概念,基本定义规则如下:(String, Int) -> Unit看起来有点抽象,一点点解释的话就是 ->左边括号里的,就是该函数类型要接收的参数类型,可以定义好多个,以逗号隔开;->右边用于声明该函数的返回值是什么类型,如.原创 2020-11-23 23:32:09 · 237 阅读 · 0 评论 -
Kotlin扩展函数
扩展函数:在不修改某个类的源码的情况下,仍然可以打开这个类,向该类中添加新的函数。比如说,我们在Android开发中经常用到Toast,每次创建一个Toast的时候,又要传入上下文,还要传入内容,还要时间长短,最后还得写个show,有时候show忘记写了还一脸懵逼的不知道为啥不弹出来,于是可以封装一个ToastUtil来管理toast:public class ToastUtil { public static void showToast(String msg) { Toa.原创 2020-11-22 21:36:07 · 447 阅读 · 1 评论 -
Kotlin静态方法
静态方法:在某些编程语言中又叫做类方法,指的就是不需要创建实例就可以直接调用的方法,几乎所有的变成语言都会支持静态方法的。在JAVA中,定义静态方法很简单,只需要static关键字:public class Util { static void doSomething(){ //doSomething }}可以看到很方便吧,但是在Kotlin中却极度的弱化了静态方法这个概念,Kotlin提供了比静态方法更好用的特性:单例,在Kotlin中使用单例很简单,使用ob.原创 2020-11-22 20:35:33 · 493 阅读 · 0 评论 -
Kontakt标准函数(with、run、apply)
Kotlin标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数with:该函数接收两个参数,第一个参数是任意类型的对象;第二个参数是一个lambda表达式。with函数会在lambda表达式中提供第一个函数的上下文,这样就很方便的可以调用第一个函数相关的API,并且以lambda表达式中最后一行代码。标准定义公式为:val result = with(obj){ //这里是obg的上下文,可以直接调用obj相关的API "value"/原创 2020-11-22 19:44:10 · 203 阅读 · 0 评论 -
Kotlin-Lambda表达式
之所以我觉得Kotlin有点为了语法糖而语法糖的地方就在这里,一个Lambda表达式有五种写法。。。虽然是一步步根据语法糖演变过来的,但是我还是记的相当痛苦。Lambda:一小段可以作为参数传递的代码,语法结构为:{参数名1: 参数类型,参数名2:参数类型 -> 函数体}这是完整的Lambda表达式的定义公式,函数体的最后一行代码就是该Lambda表达式的返回值!当然还有简化版的啦,做一个找出 一个数组里长度最长的单词的函数的话,用Lambda表达式应该这么写:fun main() {原创 2020-11-19 23:12:19 · 274 阅读 · 2 评论 -
Kotlin面向对象
面向对象至于什么是面向对象,我就不多扯了,大概就是下面这样…咳咳抖个机灵,类是对事物的一种封装啊,封装继承和多态是面向对象的三大特征啊啥的这些都被说烂了的。封装我们直接开始在Kotlin中建立一个类,叫Person:class Person { var name = "" var age = 0 fun eat() { println("$name is eating. He is $age years old.") }}接下来开始实原创 2020-11-19 22:12:00 · 161 阅读 · 0 评论 -
Kotlin流程控制
以前学JAVA的时候知道,程序的执行语句主要分3种:顺序、条件和循环。ifKotlin中的if和JAVA中几乎没有区别,唯一的区别就是Kotlin中if代码块的最后一行是if整个代码块的返回值,比如: private fun testMethod(num1: Int, num2: Int): Int { return if (num1 > num2) { num1 } else { num2 }原创 2020-11-18 21:53:15 · 99 阅读 · 0 评论 -
Kotlin变量与函数
变量在Kotlin中定义变量与JAVA有很大的区别,JAVA中比如你想定义一个整型变量你的这么写:private int i = 0;如果是一个字符串变量的话你得这么写:private String s = "";其中private是访问控制修饰符,int和String是变量类型,=号后面跟的是具体的值。而Kotlin中定义一个变量,只允许在变量前声明两种关键字:val和var。val:value的简写,用来声明一个不可变的变量,这种变量在初始化赋值之后就再也不能重新赋值,对应JAVA中的原创 2020-11-17 23:22:29 · 270 阅读 · 0 评论