内容来自学习郭霖《第一行代码(第三版)》

关于findViewById()

Java中如果不用第三方开源库,例如ButterKnife,则需要对布局文件中所需要用到的控件在Java代码中使用findViewById方法来绑定获取控件的实例。而Kotlin中则不用,直接在activity中使用这个控件的ID就可以了。这是因为使用Kotlin编写Android项目在app/build.gradle文件的头部默人引用了apply plugin: 'kotlin-android-extensions'插件,这个插件会自动根据布局文件中定义的控件ID自动生成一个具有相同名称的变量。因此我门可以直接在activity中使用这个变量,而不用再次去调用findViewById方法了,其实apply plugin: 'kotlin-android-extensions'插件背后也是通过findViewById()方法来实现的。

启动Activity的最佳写法

在实际项目开发过程中经常会出现对接的情况。比如SecondActivity并不是你开发的,但现在你负责开发的部分需要启动SecondActivity,而你却不清楚启动SecondActivity需要传递哪些参数。这是无非就有两个方法:一个是你自己去阅读Second Activity中的代码,另外一个是询问编写SecondActivity的同事。你会不会觉得很麻烦呢?其实只需要换一种写法,就可以轻松解决上面的窘境,代码如下:

class SecondActivity : BaseActivity() {
    companion object{
        fun actionStart(context: Context,data1:String,data2:String){
            val intent=Intent(context,SecondActivity::class.java)
            intent.putExtra("param1",data1)
            intent.putExtra("param2",data2)
            context.startActivity(intent)
        }
    }
}

可以用apply标准函数简化,写法如下:

class SecondActivity : BaseActivity() {
    companion object{
        fun actionStart(context: Context,data1:String,data2:String){
            val intent=Intent(context,SecondActivity::class.java).apply{
            putExtra("param1",data1)
            putExtra("param2",data2)
            }
            context.startActivity(intent)
        }
    }
}

在启动SecondActivity的地方

SecondActivity.actionStart(this,"data1","data2")

定义静态方法

在Java中定义一个静态方法非常简单,只需要在方法上声明一个static关键字就可以了,如下所示:

public static Util{
	public static void doAction(){
		System.out.println("do action")
	}
}

这是一个简单的工具类,上述代码doAction就是一个静态方法,调用静态方法不需要创建类的实例,直接Util.doAction(),适合编写一些工具类的功能。
而Kotlin中推荐使用单例类的方法来实现静态方法同样的功能,具体实现如下:

object Util{
	fun doAction{
		println("do action")
	}
}

使用时,也是直接Util.doAction(),而不用创建类的实例。
不过这样,存在一定的问题,就是只要是Util类里面的方法都将变成类似这种静态方法的调用方式,如果只希望Util类中的某一个方法变成这种调用方式呢?答案如下:

class Util{
	fun doAction1(){
		println("do action1")
	}

	companion object{
		fun doAction2(){
		println("do action2")
		}
	}
}

上述Util类中doAction1是普通类,调用它需要先创建Util类的实例,而doAction2则可以用Util.doAction2()直接调用。

Kotlin中真正静态方法的写法

上述Kotlin静态方法的实现都不是真正意义上的静态方法,而是通过单例的方式来达到同样的效果,而kotlin真正意义上的实现静态方法如下:

使用@JvmStatic注解

class Util {
    fun doAction1(){
        println("do action1")
    }
    
    companion object{
        @JvmStatic
        fun doAction2(){
            println("do action2")
        }
    }
}

注意:@JvmStatic注解只能加在单例类或companion object中的方法上,还有Kotlin中所有的顶层方法都是静态方法

Kotlin标准函数

普通写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val builder=StringBuilder()
    builder.append("Start eating fruit.\n")
    for (fruit in list){
        builder.append(fruit).append("\n")
    }
    builder.append(("Eat all fruits"))
    val result=builder.toString()
    println(result)

用with写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val result= with(StringBuilder()){
        append("Start eating fruits.\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Eat all fruits.")
        toString()
    }
    println(result)

用run写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val result=StringBuilder().run {
        append("Start eating fruits.\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Eat all fruits.")
        toString()
    }
    println(result)

用apply写法

    val list= listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val result=StringBuilder().apply {
        append("Start eating fruits.\n")
        for (fruit in list){
            append(fruit).append("\n")
        }
        append("Eat all fruits.")
    }
    println(result.toString())
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐