返回

Kotlin 从零到 App 开发 Part 3:扩展函数、Android 扩展、委托属性

Android

扩展函数

扩展函数允许我们为现有类添加新函数,而无需创建子类。这使得我们可以轻松地扩展类以适应我们的需要,而无需修改原始类。

例如,我们可以在 String 类中添加一个 capitalize() 函数来将字符串中的第一个字母大写:

fun String.capitalize() = this[0].toUpperCase() + this.substring(1)

现在,我们可以使用 capitalize() 函数来将字符串中的第一个字母大写:

val str = "hello world"
val capitalizedStr = str.capitalize()

println(capitalizedStr) // Hello world

参数默认值

参数默认值允许我们为函数的参数指定默认值。这使得我们可以轻松地调用函数,而无需为所有参数都提供值。

例如,我们可以为 println() 函数添加一个 message 参数,并为其指定默认值 "Hello world":

fun println(message: String = "Hello world") {
  System.out.println(message)
}

现在,我们可以使用 println() 函数来打印消息,而无需为 message 参数提供值:

println() // Hello world

Android 扩展

Android 扩展是一组库,它允许我们在 XML 布局文件中直接引用类和方法。这使得我们可以更轻松地构建用户界面。

例如,我们可以使用 Android 扩展来绑定一个按钮的点击事件:

<Button
    android:id="@+id/button"
    android:onClick="onClick"
    />

我们可以在我们的活动类中实现 onClick() 方法来处理按钮的点击事件:

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findViewById<Button>(R.id.button).setOnClickListener {
            // Handle button click
        }
    }
}

视图绑定

视图绑定是一项技术,它允许我们在代码中访问 XML 布局文件中的视图。这使得我们可以更轻松地构建用户界面。

例如,我们可以使用视图绑定来访问按钮:

class MainActivity : Activity() {

    private lateinit var button: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button = findViewById(R.id.button)

        button.setOnClickListener {
            // Handle button click
        }
    }
}

属性委托

属性委托是一项技术,它允许我们将属性的实现委托给另一个类。这使得我们可以更轻松地编写可重用代码。

例如,我们可以使用属性委托来创建一个只读属性,该属性包含当前日期:

class DateProvider {

    val currentDate: Date
        get() = Date()
}

class MyClass {

    val date: Date by DateProvider()
}

现在,我们可以使用 date 属性来访问当前日期:

val myClass = MyClass()

val date = myClass.date

println(date) // 2023-03-08

总结

在本教程中,我们学习了不同的 Kotlin 概念,这些概念将帮助我们构建 NewsFragment。我们学习了扩展函数、参数默认值、Android 扩展、视图绑定和属性委托。