Ebn's Blog

写写代码,哼哼歌

Kotlin 操作符重载

在 Kotlin 中,我们可以用 约定的操作符,代替 调用代码中以特定的命名定义的函数,来实现 与之对应的操作。例如在类中定义了一个名为 plus 的特殊方法,就可以使用加法运算符 + 代替 plus() 的方法调用。由于你无法修改已有的接口定义,因此一般可以通过 扩展函数 来为现有的类增添新的 约定方法,从而使得 操作符重载 这一语法糖适应任何现有的 Java 类。 算术运算符 我们就...

Kotlin 函数

函数默认参数和命名参数 默认参数扩展函数调用方式。 1 2 3 4 5 6 7 8 9 10 11 12 13 fun setPadding( left: Int = this.left, top: Int = this.top, right: Int = this.right, bottom: Int = this...

Kotlin 日常踩坑

踩到一个 Koltin 加 Android api 27 的坑。 Support library 升级到 27.x.x 之后,发现项目一堆报错: 它说我的 onCreateView 方法覆写了 nothing。Are You Kidding me? 对比了一下两个版本的 support library,发现了问题。 27.x.x 版本: 1 2 3 4 5 @Nullable p...

Android Instance State

今天我们来聊聊 onRestoreInstanceState 和 onSaveInstanceState 这两个非生命周期却为大家所熟知的方法。 我们从 简书 app 的一个功能说起。 浏览过一个文章页面后,如果应用在后台被杀死,再次打开 app 时,会从首页自动跳转到上次浏览的页面以及浏览的位置。 而如果是正常的返回退出应用,再次打开 app 时不会进行自动跳转。 简书 自...

Kotlin 对 Android APK 包大小的影响

使用两个空项目测试以 Java 和 Kotlin 作为开发语言生成的 APK 包的大小。 两个项目都没有任何 res 资源文件( AndroidManifest 文件中全部使用默认值),都只有一个空的 MainActivity 文件,没有任何逻辑代码。Kotlin 项目中添加了 kotlin-android 和 kotlin-android-extensions 插件,引用了 org.je...

Kotlin 标识符

简单地聊一聊 Kotlin 标识符。 Java 允许而 Kotlin 不允许的 _、__、___ 等只由下划线组成的标识符在 Kotlin 中是不允许的。但是复合在其他字符中使用是可以的。下划线在 Kotlin 中的使用有几个场景: Lambda 表达式中简写参数。 1 2 3 4 5 6 // 第一个参数是 View, 第二个参数是 MotionE...

Kotlin 的 Getter 和 Setter

关于 Kotlin 的 getter 和 setter 的基础语法就不详细介绍了。但是就是这么一个简单的概念,却有很多容易让人忽略细节。如果不理解 Kotlin 的语法在编译到字节码后是什么样的,你可能无法真正用好 getter 和 setter,先来个例子: 1 2 3 4 5 6 7 private val foo = calcValue("foo") private val bar ...

Kotlin 委托属性

简单的说,委托属性就是将一个属性的操作委托给一个委托类的实例处理,多个属性可以委托给同一个委托类。 跟没说一样。。 委托类 先看一个简单的例子。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Delegate { operator fun getValue(thisRef: Any?, property: KProperty&...

翻译:Kotlin 变量, 使用 Lazy 还是 Late?

Original(原文):Kotlin variable, to be Lazy, or to be Late? 今天我们介绍 Kotlin 中的两个新特性,基于一个老的概念——lazy initialization(懒初始化),即:推迟一个变量的初始化时机。这是个十分方便的特性,因为我们通常会遇到这样的情况,一个变量直到使用时才需要被初始化,或者仅仅是它的初始化依赖于某些无法立即...

Android 中 support-annotations library 整理

Copy from ‘com.android.support:support-annotations:25.3.1’. 只是整理归纳,用法在注释中写的很清楚了。 Res 1 2 3 4 5 6 7 8 9 /** * Denotes that an integer parameter, field or method return value is expected * to be...