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) }