Kotlin内联函数-爱代码爱编程
之前学了下高阶函数,知道了Lambda表达式很好的使用高阶函数,现在想看一下看看高阶函数的原理,要知道Kotlin文件最终都是被编译成Java字节码的,但是Java中并没有高阶函数这个概念,其实Kotlin的编译器会将这些高阶函数的语法转换成Java支持的那种,比如以前写的计算两个数的和和差的函数: fun main() { val result
代码编织梦想
之前学了下高阶函数,知道了Lambda表达式很好的使用高阶函数,现在想看一下看看高阶函数的原理,要知道Kotlin文件最终都是被编译成Java字节码的,但是Java中并没有高阶函数这个概念,其实Kotlin的编译器会将这些高阶函数的语法转换成Java支持的那种,比如以前写的计算两个数的和和差的函数: fun main() { val result
Jetpack DataStore 基础使用简单封装 在Application下初始化 DataStoreUtil.instance.init(this) 写入数据 suspend inline fun <reified T : Any> dataStoreSave(key: String,value: T) = when(T::
写在前面:关于DataBinding,感觉用的人不是很多,毕竟这是一个服务于XML的,如果要是单纯的用来绑定控件,用ViewBinding或者Kotlin的Kotlin-android-extension也都够用了。上网查了查,也有很多关于DataBinding坑很大的说法,这里贴一篇郭神的文章来解个惑。 犹豫要不要用DataBinding?这篇文章帮你
lzyprime 博客 (github) 创建时间:2020.11.24 qq及邮箱:2383518170 kotlin & android 笔记 λ: navigation 组件 是 Android Jetpack重要组成部分,推出3年左右,2018谷歌I/O大会也曾介绍过。主要用于组织Fragment,通过Fragment来实现
后缀表达式 提要 当用户输入了如同"10 - 2"这样的字符串,如何计算这个算式的算术结果? 答案似乎非常简单:遇到数字就缓存数字,遇到运算符,用缓存的数字对下一个数字进行操作就能得到结果。 对于"10 - 2 + 5"这样的序列,只需要做一点点修改:把上次的运算结果也缓存起来,跟上面的操作思路就一致了。 但是一遍线性扫描解决不了这样的问题:如何
Thader类 package xx class Trader(val name: String, var city: String) { override fun toString(): String { return "Trader:" + name + " in " + city } } Transacti
高阶函数:如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么这个函数就成为高阶函数。写习惯了Java的人可能就在想,编程语言中的参数有整型、字符串类型,布尔型等字段类型, 怎么能接收一个函数作为参数呢?其实Kotlin新增了一个函数类型的概念,基本定义规则如下: (String, Int) -> Unit 看起来有点抽象,一
文章目录 Dex更新Res更新 Dex更新 动态改变BaseDexClassLoader对象间接引用的dexElements:Classloader加载类是从DexElements依次遍历dex,如果dex中有该类则返回,没有则遍历下一个dex,所以Hotfix的解决方式就是改变dexElements中dex的顺序,具体实现方式是通过反射的方
如果不使用LiveData自动获取数据的变化,那么当每次数据库中的数据发生变化时,我们都要开启一个工作线程去重新获取数据库中的数据。 比如说,在进入页面时,要获取数据库中全部学生信息列表,一般我们会这么写: thread{ studentList = studentDao.getStudentList() as MutableList<St
项目地址 项目地址: https://github.com/xiaoerMr/Tools 项目地址 1: 使用方式 // 第一步 allprojects { repositories { maven { url 'https://jitpack.io' } } } // 第二步 dependencies { implementation
在Java或者Kotlin中枚举可以携带属性,向下面这样。使用属性可以做一些差异性判断,比如静态工厂。 enum class Car2(val maxSpeend:Int) { AUDI(200),BWM(210),BENZ(220) } 但是在实际开发中,有一些属性并不是直接就能确定的,甚至随着程序的运行才能确定,就用到了封闭类。举个例子:
Route 项目介绍 该项目只是简单的组件化开发的示例,搭建了组件化开发的雏形。 暂时没有实现内容的开发工作,目前实现功能有: 网络模块的封装、ARoute的使用方法、登陆功能的实现(UI未实现)。 组件划分 App 模块moduel_basis 基础模块moduel_login 登陆模块moduel_hilt hilt使用示例模块App 模块(A
Kotlin 的基本数据类型 相比于Java 基本数据类型都是差不多的 Java Kotlin byteByteshortShortint IntlongLongfloatFloatdouble Doublechar CharbooleanBoolean 可以看出 基本数据类型都是这8种,只是Kotlin的开头
扩展函数:在不修改某个类的源码的情况下,仍然可以打开这个类,向该类中添加新的函数。比如说,我们在Android开发中经常用到Toast,每次创建一个Toast的时候,又要传入上下文,还要传入内容,还要时间长短,最后还得写个show,有时候show忘记写了还一脸懵逼的不知道为啥不弹出来,于是可以封装一个ToastUtil来管理toast: public c
图像分割 图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于
静态方法:在某些编程语言中又叫做类方法,指的就是不需要创建实例就可以直接调用的方法,几乎所有的编程语言都会支持静态方法的。在JAVA中,定义静态方法很简单,只需要static关键字: public class Util { static void doSomething(){ //doSomething } } 可以看
Kotlin标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数 with:该函数接收两个参数,第一个参数是任意类型的对象;第二个参数是一个lambda表达式。with函数会在lambda表达式中提供第一个函数的上下文,这样就很方便的可以调用第一个函数相关的API,并且以lambda表达式中最后一行代码
四种LaunchMode使用场景 standard默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈。singleTop如果栈顶存在该Activity的实例,就复用该实例(会调用onNewIntent()),否则会创建新的实例并放入堆栈,即使存在该Activity实例,只要不在栈顶就会创建新的实例。singleTask如果该栈
好文参考: https://juejin.cn/post/6893809019425816584 https://juejin.cn/entry/6844903854245412871 1.概念 Essentially, coroutines are light-weight threads. 协程是轻量级的线程。线程是由系统调度的,线程切
说实话,一开始接触LiveData的概念,是通过郭神的《第一行代码(第三版)》,但是一股脑的各种概念铺天盖地而来,导致的后果就是面对LiveData莫名地有种恐惧,所以这也是我开始专门研究Jetpack的一个初衷(题外话,在小公司写传统业务代码,真的是可以用10年前的技术吃一辈子,严重脱节)。 一、LiveData原理 说回LiveData,可以将Li