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