kotlin 基础知识1 继承与构造函数、接口、修饰符、数据类和单例类、集合、lambda表达式、判空

泠之屋

关注

阅读 14

05-18 21:00

1.继承与构造函数

①.如果类需要被继承,则需要在类前面添加open关键字,因为kotlin的设计就是让其最好是不可变的,类似变量推荐使用val。如下:

open class Person{ ... } ②.kotlin分为主构造函数和次构造函数,主构造函数没有函数体,用init初始化。次构造函数通过constructor,kotlin提供了给函数参数设定默认值的功能,基本上代替了次构造函数。如下:

class Person(val name:String,val age:Int = 0){//主构造函数 age默认值0 init{//构造函数体执行内容 Log.v(TAG,name) } } 2.接口

kotlin接口函数可以有具体实现,并且在实现接口的类中可以不用实现接口中已实现的函数不会报错。java 8中也支持,如下:

interface Study{ fun readBooks()

fun doHomework(){
    Log.v(TAG,"doHomework")
}

}

class Student():Study{

//必须要实现 fun readBooks(){ Log.v(TAG,"readBooks") }

//可以不实现 // fun doHomework(){ // Log.v(TAG,"doHomework") // }

}

3.kotlin与java修饰符区别

修饰符 java kotlin public 所有类可见 所有类可见(默认) private 当前类可见 当前类可见 protected 当前类,子类,同一包路径下的类可见 当前类,子类可见 default 同一包路径下的类可见(默认) 无 internal 无 同一模块下的类可见 4.数据类和单例类

数据类:用于将服务端的数据映射到内存中,相当于mvp,mvvm中的model层

数据类特点:通常重写了equals()、hashCode()、toString()方法。

kotlin数据类,一行代码,添加data修饰符,如下:

data class Callphone(val price:Double) 单例类:全局只有唯一一个实例。

kotlin单例类:只需要将class改成object即可:

object Singleton{//单例类,只需要将class改成object fun singletonTest(){

}

}

//调用方式 看上去是静态调用,本质上是单例模式 Singleton.singletonTest() 相当于java中:

public final class Singleton { @NotNull public static final Singleton INSTANCE; private Singleton() { } static { Singleton var0 = new Singleton(); INSTANCE = var0; }

void singletonTest() {
    
}

}

5.集合

listOf()函数创建一个不可变的集合,mutableListOf()函数创建可变的集合

val list = listOf("a","b","c")//不可变集合

val list1 = mutableListOf("a","b","c")//可变集合

val map = mapOf("a" to 1,"b" to 2)//to是infix函数 6.lambda表达式

通俗定义:一段可以传递参数的代码

语法结构:{参数名1:参数类型,参数名2:参数类型 -> 函数体}

注意:如果有返回值,lambda表达式最后一行是返回值

lambda表达式简略演化步骤:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding: ActivityMainBinding =
        DataBindingUtil.setContentView(this, R.layout.activity_main)
    binding.content = "http://img2.cache.netease.com/photo/0001/2016-07-21/BSGSEIG100AO0001.jpg"

    //初代版本
    val a:(Int)->Unit = { x-> Log.v("ssssssssssssssssss",x.toString()+"ssssss")
        Log.v("ssssssssssssssssss",x.toString()+"ssssss")
    }

    find(3,a)

    //在方法中实现lambda
    find(3,{x-> Log.v("ssssssssssssssssss",x.toString()+"ssssss")
        Log.v("ssssssssssssssssss",x.toString()+"ssssss")})

    //将lambda表达式放在外面  find如果是唯一参数可以去掉() 此处还有一个参数3
    find(3) {x-> Log.v("ssssssssssssssssss",x.toString()+"ssssss")
            Log.v("ssssssssssssssssss",x.toString()+"ssssss")}

    //将lambda表达式放在外面  find如果是唯一参数可以去掉() 此处还有一个参数3  lambda表达式是唯一参数可以用it代替
    find(3) {Log.v("ssssssssssssssssss",it.toString()+"ssssss")
        Log.v("ssssssssssssssssss",it.toString()+"ssssss")}
}

fun find(index :Int,opration: (Int)-> Unit){
    opration(index)
    Log.v("ssssssssssssssssss", index.toString())
}

}

7.kotlin 判空

①.判空

if(a!=null){ a.doSomething() }

//相当于上面的代码 a?.doSomething() ②.a为null的处理方式

val c = if(a!=null){ a } else { b }

//利用?:代替上面的代码 val c = a ?:b ③.用let替换多个需要判空的调用

fun doStudy(study: Study?){ study?.readBooks() study?.doHomework() }

//利用let代替多个判空的地方 fun doStudy(study: Study?){ study?.let{ it.readBooks() it.doHomework() } } ————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/gongjdde/article/details/105648162

精彩评论(0)

0 0 举报