Kotlin基础
Kotlin基础知识
yu-Knight
雄关漫道真如铁,而今迈步从头越!
多年Android开发经验。
熟悉HTML、CSS、JS、JAVA、Kotlin、PHP等常用开发语言。
展开
-
Kotlin中手写RxJava原理实现
//Kotlin中手写RxJava原理实现fun main() { //create 输入源:没有任何参数, 输出源:所有类型 //map 输入源:create输出源的valueTtem, 输出源: 所有类型 //observer 输入源:map存储的valueItem, 消费完成。 create { "yuknight" 123 true 3.13f }.map { "上面传.原创 2022-02-10 00:59:15 · 661 阅读 · 0 评论 -
Kotlin中Lambda的十三种形式
//Kotlin中Lambda的十三种形式fun main(args: Array<String>) { //函数的声明 var method1: () -> Unit var method2: (Int, Int) -> Int var method3: (String, Boolean) -> Any? var method4: (Int, Double, Long, String?) -> Boolean // .原创 2022-02-11 22:09:01 · 417 阅读 · 0 评论 -
Kotlin中Java调用Kotlin代码@file:JvmName,@JvmField,JvmOverloads与@JvmStatic注解的使用
Kotlin代码//Kotlin中Java调用Kotlin代码@file:JvmName,@JvmField,JvmOverloads与@JvmStatic注解的使用@file:JvmName("Stu")//@file:JvmName必须写在包名外面fun getStudentValueInfo(str:String) = println(str)//有默认参数@JvmOverloads//编译器会专门重载一个函数给java使用fun show(name: String, age:I.原创 2022-02-10 19:43:19 · 1082 阅读 · 0 评论 -
Kotlin中Java与kotlin的单例实现
Java中单例饿汉式的实现//Java中单例饿汉式的实现public class SingletonDemo { private static SingletonDemo instance = new SingletonDemo(); private SingletonDemo() { } public static SingletonDemo getInstance() { return instance; }}kotlin中.原创 2022-02-10 17:23:29 · 256 阅读 · 0 评论 -
Kotlin中结合flatMap进行过滤操作以及zip合并操作符
//Kotlin中结合flatMap进行过滤操作以及zip合并操作符fun main() { val list = listOf<String>("黄晓明", "李连杰", "李小龙", "刘军", "李四", "刘明", "刘俊", "黄家驹", "黄飞鸿") val list2 = list.map { "$it" } println(list2) val newList = listOf( listOf("黄晓明".原创 2022-02-10 01:48:02 · 831 阅读 · 0 评论 -
Kotlin中变换函数map与flatmap
//Kotlin中变换函数map与flatmapfun main() { val list = listOf("张三", "李四", "王五") //原理:把匿名函数最后一行的返回值加入一个新的集合,新集合的泛型是R,并且返回新集合 val list2: List<Int> = list.map { //it == T == 元素 == String "[$it]" 88 } println(list2).原创 2022-02-10 01:25:24 · 1153 阅读 · 0 评论 -
Kotlin中DSL领域专用语言理解(Domain Specified Language/DSL)
class Context { val info = "yuknight" val name = "AAA" fun toast(str: String) = println("toast:$str")}inline fun Context.myApply(lambda: Context.(String) -> Unit): Context { lambda(info) return this}inline fun File.applyFile(.原创 2022-02-09 03:34:43 · 201 阅读 · 0 评论 -
Kotlin中apply,also,let,run函数详解与内部源码原理分析
1. let的返回类型是根据匿名函数的变化而变化(lambda的返回类型变化而变化)2. 匿名函数里面持有的是 it == I == info本身inline fun <I, O> I.let(lambda:(I) -> O) = lambda(this)1. apply的返回类型永远都是I(所以可以链式调用), lambda的返回类型无变化即Unit,并且没有和lambda关联返回类型2. I.()匿名扩展函数里面持有的是 this == I == info本身inli...原创 2022-02-09 03:33:30 · 791 阅读 · 0 评论 -
Kotlin中infix关键字中缀表达式与泛型扩展函数的使用
//条件一:对第一个参数进行 T.go 函数扩展//条件二:需要在括号(r:R)参数里面传递一个参数private infix fun <T, R> T.go(r: R) { println("中缀表达式,第一个参数的内容是:$this") println("中缀表达式,第二个参数的内容是:$r")}fun main(){ //map中自带的中缀表达式 mapOf("map1" to 1) mapOf("map2" to 2) mapO.原创 2022-02-08 22:27:37 · 492 阅读 · 0 评论 -
Kotlin中函数扩展与属性扩展和非空类型扩展
val myStr: String = "AAA"//扩展属性val String.myInfo: String get() = "yuknight"fun String.showPrintln(): String { println("打印输出,并链式调用,内容是:$this") return this}val String.strValue: String get() = "当前${System.currentTimeMillis()},调用一次,值是:..原创 2022-02-08 18:40:03 · 325 阅读 · 0 评论 -
Kotlin中标准函数let与泛型扩展函数
fun main() { "yuknight".mLet { it true "Ok" } 123.mLet { it } val str = "str".let { it }}//fun<I, O> 在函数中,声明两个泛型,函数类型,I输入参数,O函数返回值//I.mLet 对I输入参数进行扩展,扩展函数名称是mLet,意味着所有的类型都可以调用此函数.原创 2022-02-08 03:47:09 · 998 阅读 · 0 评论 -
Kotlin中Any超类与泛型扩展函数的使用
//Kotlin中Any超类与泛型扩展函数的使用data class ResponseResult1(val msg: String, val code: Int)data class ResponseResult2(val msg: String, val code: Int)//对超类Any扩展一个函数fun Any.showPrintlnContent() = println("当前内容是: $this")//对超类Any扩展一个函数,调用时可以链式调用fun Any.showPri.原创 2022-02-08 02:47:38 · 722 阅读 · 0 评论 -
Kotlin中reified关键字对于泛型使用
data class ObjectClass1(val name: String, val age: Int, val study: String)data class ObjectClass2(val name: String, val age: Int, val study: String)data class ObjectClass3(val name: String, val age: Int, val study: String)class KTDemo15 { //功能:默认输.原创 2022-02-08 00:27:26 · 480 阅读 · 0 评论 -
Kotlin中out协变与in逆变使用
//in T out T 声明处指定关系 声明处泛型 这是Java没有的功能//整个 SetClass 里面的所有成员 泛型相关,只能修改不能读取class SetClass<in T> { fun set1(item: T) { println("set1 需要设置的item:$item") } fun set2(item: T) { println("set2 需要设置的item:$item") }}//整个 g.原创 2022-02-07 23:41:46 · 216 阅读 · 0 评论 -
Kotlin中out协变与in逆变以及不变的理解
java 中 ? extends T 相当于kotlin中的outString 是 CharSequence 的子类List<CharSequence> list = new ArrayList<CharSequence>();List<? extends CharSequence> list2 = new ArrayList<String>(); // out T泛型具体的子类对象可以赋值给泛型声明处的父类对象-----------------.原创 2022-02-07 23:11:06 · 319 阅读 · 0 评论 -
Kotlin中函数中使用的lambda几种方式(高阶函数)
//Kotlin中函数中使用的lambda几种方式fun main(args: Array<String>) { /** * 函数中返类型里面有lambda */ // 第一步:函数输入输出的声明 第二步:对声明函数的实现 val methodAction1: (Int, Int, Int) -> String = { number1, number2, number3 -> v.原创 2022-02-07 04:07:48 · 261 阅读 · 0 评论 -
Kotlin中泛型与vararg可变参数的使用
//Kotlin中泛型与vararg可变参数的使用class KtBase10<T>(vararg objects: T, var isMap: Boolean) { //out 这里的T只能被读取,不能修改 private val objectArray: Array<out T> = objects fun showObj(index: Int): T? = objectArray[index].takeIf { isMap } ?: null .原创 2022-02-07 02:27:49 · 1520 阅读 · 0 评论 -
Kotlin中泛型变换实现
//Kotlin中泛型变换实现class KtBase9<T>(val isMap: Boolean = false, val inputType: T) { //模仿RxJava T是要变化的输入类型 R是变化后的输出类型 //调用map返回的类型是 R? == 有可能是R或者null inline fun <R> map(mapAction: (T) -> R): R? = mapAction(inputType).takeIf { isM.原创 2022-02-06 23:47:52 · 620 阅读 · 1 评论 -
Kotlin中泛型与内置函数和空合并的应用理解
//Kotlin中泛型与内置函数和空合并的应用理解class KtBase8<T>(private val isR: Boolean, private val obj: T) { fun getObj() = obj.takeIf { isR }//{里面是true则返回obj,false则返回null}}fun main(args: Array<String>) { val stu1 = Student7("张三", 44, '男') val st.原创 2022-02-06 22:44:42 · 480 阅读 · 0 评论 -
Kotlin中抽象类与泛型的使用
//抽象类使用abstract class BaseActivity { fun onCreate() { setContentView(getLayoutID()) initview() initData() initAction() } abstract fun getLayoutID(): Int abstract fun initview() abstract fun initData().原创 2022-02-06 17:51:57 · 447 阅读 · 0 评论 -
Kotlin中对象的继承与接口理解
KT所有的类默认是final修饰的,不能被继承和java相反open:移除final修饰KT所有的函数,默认是final修饰的,不能被重写和Java相反1.接口里面的所有成员和接口本身都是public open的2.接口不能有主构造,反正就是没有构造3.实现类不仅仅要重写接口的函数也要重写接口成员//KT所有的类默认是final修饰的,不能被继承和java相反//open:移除final修饰open class Preson(val name: String) { pri.原创 2022-02-06 01:21:55 · 518 阅读 · 0 评论 -
Kotlin中let,apply,run,with和also内置函数的理解与区别
内置函数的总结let:1.let函数返回类型,是根据匿名函数的最后一行变化而变化2.let函数中的匿名函数里面持有的是it == 集合自身apply: info:apply1.apply函数返回类型,都是info自身2.apply函数中的匿名函数里面持有的是this == info自身run:str.run1.run函数返回类型,是根据匿名函数最后一行变化而变化2.run函数中的匿名函数里面持有的是this == str自身with with(str)1.with函数返回类型,.原创 2022-02-05 01:34:04 · 560 阅读 · 0 评论 -
Kotlin中let的安全调用,非空断言,空合并操作符 ?:以及let函数与空合并操作符使用
//使用let的安全调用,非空断言,空合并操作符 ?:以及let函数与空合并操作符使用fun main(args:Array<String>){ var name:String? = null name = "yuknight" name = "" //name是可空类型 如果真的是null,?后面这一段代码不会执行,就不会引发空指针异常 val r = name?.let { //it == name 本身 //如果.原创 2022-02-04 16:50:42 · 646 阅读 · 0 评论 -
Kotlin中函数类型作为函数的返回类型
//函数类型作为函数的返回类型fun main(args: Array<String>) { val result = showAction() println(result)/*----------------------------------------------------*/ // r是show函数的返回值 val r = show("Kotlin语言") //nimingShowMethod 是 showMethod函数的返回值,这个.原创 2022-02-04 15:35:08 · 1350 阅读 · 0 评论 -
Kotlin中函数的内联与函数引用
此函数有使用lambda作为参数,就需要声明成内联如果此函数不使用内联,在调用的地方会生成多个对象来完成lambda的调用(会造成性能损耗)如果此函数使用内联,会把代码替换到调用处,调用处没用任何函数的开辟和对象开辟的损耗总结:如果函数参数有lambda,尽量使用inline关键字,这样内部会做优化,减少函数对象的开辟的损耗函数的引用只要是使用lambda表达式的地方,都可以使用函数引用,例如: ::responseMethodlambda属于函数类型的对象, 需要把responseMet.原创 2022-02-04 15:01:46 · 413 阅读 · 0 评论 -
Kotlin中Lambda的使用与理解:匿名函数 == Lambda 表达式
Kotlin中Lambda的使用与理解:匿名函数 == Lambda 表达式fun main(args: Array<String>) { //匿名函数 == Lambda 表达式 val addResultMethod = { number1: Int, number2: Int -> "两数相加之和:${number1 + number2}" }//addResultMethod:(Int, Int)->String prin原创 2022-02-03 22:13:20 · 495 阅读 · 0 评论 -
Kotlin中函数的隐式调用以及匿名函数的使用
Kotlin中函数的隐式调用以及匿名函数的使函数类型与隐式返回第一步:函数输入输出声明第二步:对上面函数的实现第三步:调用此函数fun main(args: Array<String>) {/*----------------------------------------------------*/ //函数类型与隐式返回 //第一步:函数输入输出声明 val methodAction1: () -> String //第二原创 2022-02-03 21:14:33 · 738 阅读 · 0 评论