Kotlin 和 Android

原文链接:Kotlin and Android | Android Developers

现在,您可以用干练、强大、富有表达力的 Kotlin 来开发 Android 应用。而且,最棒的是它可以和 Java 编程语言、以及现有的 Android 运行时框架互用(interoperable)。

开始动手

现代、安全、表达力强

Kotlin 既精简干练又富有表达力。它含有针对空值(nullability)和不可变性(immutability)的安全特性,让您的应用从一开始就保持健康高效。

更安全的代码

写更安全的代码,在您的应用中避免 NullPointerException

  1. var output: String
  2. output = null // 编译错误
  3. ==================================
  4. val name: String? = null // 可为空值的类型
  5. println(name.length()) // 编译错误

精简干练、可读性高

数据类(Data class)

集中注意力在您的点子上,少写八股代码(boilerplate code)。

  1. // 这一行代码就能创建一个含有 getter、setter、equals()、
  2. // hashCode()、toString() 和 copy() 的 POJO:
  3. data class User(val name: String, val email: String)

匿名函数(Lambda)

使用匿名函数来简化您的代码。

  1. button.setOnClickListener(new View.OnClickListener(){
  2. @Override
  3. public void onClick(View v){
  4. doSomething();
  5. }
  6. });
  1. button.setOnClickListener { doSomething() }

默认实参(default argument)、命名实参(named argument)

用默认实参来减少函数重载。使用命名实参来调用函数,让您的代码更具有可读性。

  1. fun format(str: String,
  2. normalizeCase: Boolean = true,
  3. upperCaseFirstLetter: Boolean = true,
  4. divideByCamelHumps: Boolean = false,
  5. wordSeparator: Char = ' ') {
  6. }
  7. ==================================
  8. // 使用命名实参来调用函数
  9. format(str, normalizeCase = true, upperCaseFirstLetter = true)

findViewById 说再见

在您的代码中避免啰嗦的 findViewById() 调用,从而把精力集中在编写业务逻辑上。

  1. import kotlinx.android.synthetic.main.content_main.*
  2. class MainActivity : AppCompatActivity() {
  3. override fun onCreate(savedInstanceState: Bundle?) {
  4. super.onCreate(savedInstanceState)
  5. setContentView(R.layout.activity_main)
  6. // 毋须调用 findViewById(R.id.textView) 来返回一个 TextView
  7. textView.text = "Kotlin for Android 嘹咋咧!"
  8. }
  9. }

不继承父类却仍能拓展功能

扩展函数(Extension function)和扩展属性(Extension properties)让您在不继承类的情况下也能轻易地扩展它的功能,而且,这种扩展代码的调用有着良好的可读性。

  1. // 使用 inflate 函数来扩展 ViewGroup
  2. fun ViewGroup.inflate(layoutRes: Int): View {
  3. return LayoutInflater.from(context).inflate(layoutRes, this, false)
  4. }
  5. ==================================
  6. // 在 ViewGroup 的实例上直接调用 inflate
  7. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
  8. val v = parent.inflate(R.layout.view_item)
  9. return ViewHolder(v)
  10. }

和 Java 的完全互用性

您可以为 Java 项目中随意添加或少或多 Kotlin 代码,因为它是一个和 Java 编程语言可以完全互用的 JVM 语言。

  1. // 在 Kotlin 中调用 Java 代码
  2. class KotlinClass {
  3. fun kotlinDoSomething() {
  4. val javaClass = JavaClass()
  5. javaClass.javaDoSomething()
  6. println(JavaClass().prop)
  7. }
  8. }
  9. ==================================
  10. // 在 Java 中调用 Kotlin 代码
  11. public class JavaClass {
  12. public String getProp() { return "Hello"; }
  13. public void javaDoSomething() {
  14. new KotlinClass().kotlinDoSomething();
  15. }
  16. }

出色的工具支持

Android Studio 3.0 提供了帮助您开始使用 Kotlin 的工具,让您能把整个 Java 文件转换成 Kotlin,或者在向 Kotlin 文件拷贝 Java 代码片段的时候随手转换。

Kotlin 和 Android - 图1

开源的 Kotlin

正如 Android 那样,Kotlin 是按照 Apache 2.0 协议开源的项目。在 Android 平台演化进步的时候,我们对 Kotlin 的选择再一次证实了我们对于开源社区生态的承诺,这个语言的日益精进更是令我们亦可赛艇。

在 GitHub 上查看 Kotlin 项目

使用 Kotlin 编写的应用

许多应用已经使用 Kotlin 编写,其中不乏最炙手可热的创业公司和财富五百强的一本大厂。