美文网首页
kotlin入门(三)

kotlin入门(三)

作者: zty5678 | 来源:发表于2018-12-18 14:19 被阅读9次

kotlin入门(一)
kotlin入门(二)
kotlin入门(三)

kotlin里的 Any和Object

我们知道java里所有的类都有一个父类java.lang.Object。那么在kotlin里也是这样吗?

fun main(args: Array<String>) {
    
    println(testInstanceOfObject("string"));
    println(testInstanceOfObject(1));
    println(testInstanceOfObject(null));
    println(testInstanceOfObject(Object()))
    println(testInstanceOfObject(Any()));

}
fun testInstanceOfObject(x: Any?): String{
    var result="x: ";
    if (x is Any){
        result+= "is Any; ";
    }
    if (x is Object){
        result+= "is Object; ";
    }
    if (x is Integer){
        result+= "is Integer; ";
    }
    if (x is String){
        result+= "is String; ";
    }

    result+= (" value is "+x.toString())

    return result;
}

打印结果:

x: is Any; is Object; is String;  value is string
x: is Any; is Object; is Integer;  value is 1
x:  value is null
x: is Any; is Object;  value is java.lang.Object@4b1210ee
x: is Any; is Object;  value is java.lang.Object@4d7e1886

总结:在kotlin里,new一个Any类型的对象,那么同时它也属于Object类型;new一个Object类型的对象,那么同时它也属于Any类型。

when的用法(其实就是switch-case)

fun testWhen(x: String?) {
    when (x) {
        "1" -> {
            println("value is 1")
        }
        "2" -> {
            println("value is 2")
        }
        ""->{
            println("empty string")
        }
        null->{
            println("null")
        }
        else->{
            println("other value: ${x}")
        }
    }
}

扩展函数

什么是扩展函数?在目前已存在的类的基础上添加新的函数,同时这些函数定义在类的外部。

举例:

class User( ) {

}
fun User.testFunction(x: String){
    println("x= "+x);
}
fun main(args: Array<String>) {
    val user = User();
    user.testFunction("abc");// 注意这里对testFunction的调用
}

在kotlin里,函数可以作为对象传给另一个函数

拿最常见的点击事件来说:

fun main(args: Array<String>) {
    setOnClickListener{
        println("hello world")
    }
}

fun setOnClickListener(onClicked: () -> Unit?){
    onClicked();
}

用object关键字声明单例类

object User{
    const val CONST_VALUE ="xxx";
    fun test1(){
        
    }
}
然后可以直接用User.test1()来调用test1函数,不用新建一个User对象。

遍历某文件夹下的所有文件

var file = File("C:/Users/Administrator/Desktop/test");
file.listFiles().filter { it.isFile }.forEach { println(it.absolutePath) }

递归遍历某文件夹下的所有文件, 包括子文件夹里的文件

var file = File("C:/Users/Administrator/Desktop/test");
file.walkTopDown().filter { it.isFile }.forEach { println(it.absolutePath) }

相关文章

网友评论

      本文标题:kotlin入门(三)

      本文链接:https://www.haomeiwen.com/subject/ofnxkqtx.html