Kotlin 的泛型系统

泛型是静态类型语言中不可缺少的一部分,Kotlin 的泛型定义和使用都类似 Java,但也有一些基于工程实践考虑的优化和改进。

Kotlin 中的属性委托:ValueKit 的实现介绍

RetroPreference 是我之前用 Java 写的一个在 Android 项目里方便使用 SharedPreferences 的小工具,它能像 Retrofit 一样定义一个方便查看和管理的接口,然后通过库提供的方法创建实现这个接口的实例来完成对 SharedPreferences 的操作。很早之前我也用 Kotlin 重写了这个工具,但是基本类型必须有一个默认值这点感觉不是很符合使用者的需求。在学习 Kotlin 的委托属性后,我意识到可以用它更简单的实现这个工具。

Anko 源码阅读笔记:构建 DSL 的基本原理

官方给出这一段 Anko AlertDialog DSL 的例子:

1
2
3
4
alert("Hi, I'm Roy", "Have you tried turning it off and on again?") {
yesButton { toast("Oh…") }
noButton {}
}

这段代码可以构造出一个简单的对话框控件,下面介绍一下这种代码是如何被 Kotlin 解析的。

源码安装配置 Nginx 记录

debian 官方源中的 nginx 太旧了(1.6.x),想试试开启 HTTP2 和 TCP/UDP 负载均衡试试,需要 1.9 版本以上。换了 backports 的源一些相关模块总是安装不成功(←太菜),所以尝试了从源码安装,顺便体验一下最新的 nginx。

Java 中实例化一个抽象类对象的方式

在 Java 中抽象类是不能直接被实例化的。但是很多时候抽象类的该特点成为一个比较麻烦的阻碍。例如如果我想使用动态代理来给一个抽象类赋予其执行抽象方法的能力,就会有两个困难:1. 动态代理只能创建实现接口的一个代理对象,而不能是一个继承抽象类的对象。为此标准的 JVM 中有一些实现,例如 javassist 可以使用字节码工具来完成这一目的(ProxyFactory)。

JitPack 发布包含 Annotation Processor 的项目

普通的项目(单个 Library Module)发布到 JitPack,体验不错几乎是零配置的。尝试了一下直接构建了一下一个包含两个 module 的项目——一个 Android Library Module 和一个纯 Java Module 的时候,JitPack 只构建了 Java 的 Module。

Jenkins 获得本次构建的 git change log

Jenkins 每次构建都会根据 git 的提交记录生成一个 web 页面来显示自上次构建之后的提交记录列表。在配置 CI 工作流时,很多情况需要获取这个提交记录的 String 值,但是 Jenkins 并没有提供这个功能。