欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Kotlin基础语法六

Kotlin基础语法六

2025/6/17 11:56:06 来源:https://blog.csdn.net/heheda123a/article/details/148594021  浏览:    关键词:Kotlin基础语法六
  • 接口 抽象类 继承
    和Java差不多,都是通过 :

  • vararg
    动态参数,可以传入多个参数。

  • 扩展函数

// 假设这个代码是,开源的,或者是很庞大JDK源码,或者是非常复杂的开源库
class KtBase113 (val name: String, val age: Int, val sex: Char)// 增加扩展函数
fun KtBase113.show() {println("我是show函数, name:${name}, age:$age, sex:$sex")
}
  • 中缀表达式 infix
// 自定义的中缀表达式 + 扩展函数 一起用的     使用者: "一".gogogo(1)  "一" gogogo 1
// 1.条件一  对第一个参数 C1.gogogo  函数扩展
// 2.条件二  需要在 括号(c2: C2) 参数里面,传递一个参数
private infix fun <C1, C2> C1.gogogo(c2: C2) {// 做很多的逻辑// ...// 省略几万行代码println("我们的中缀表达式,对一个参数的内容是:$this")println("我们的中缀表达式,对二个参数的内容是:$c2")
}123 gogogo '男'
  • 重命名扩展
// 1.扩展文件一般都是public,如果private外界无法使用
// 2.Iterable<E> 子类 set list 都可以用,所以用父类
// 3.本次扩展函数的作用是,随机取第一个元素返回
fun <E> Iterable<E>.randomItemValue() = this.shuffled().first()
fun <T> Iterable<T>.randomItemValuePrintln() = println(this.shuffled().first())val list : List<String> = listOf("李元霸", "李连杰", "李小龙")
println(list.randomItemValue())import randomItemValue as g  // as g 重命名扩展操作
import randomItemValuePrintln as p val list : List<String> = listOf("李元霸", "李连杰", "李小龙")
val set : Set<Double> = setOf(545.5, 434.5, 656.6)
// 使用 扩展文件
println(list.g())
println(set.g())
  • 变换函数-map
    val list = listOf("李元霸", "李连杰", "李小龙")// T T T  --->  新的集合(R, R, R)// 原理:就是把你 匿名函数 最后一行的返回值 加入一个新的集合,新集合的泛型是R,并且返回新集合val list2 : List<Int> = list.map {// it = T == 元素 == String"【$it】"88}println(list2)
  • 变化函数-flatmap
// map {返回类型:T String Int Boolean Char ...  是把每一个元素(String)加入到新集合,最后返回新集合 List<String>}
// flatMap {返回类型:每一个元素 T 集合1 集合2 集合3 ... 是把每一个元素(集合)加入到新集合,最后返回新集合 List<List<String>> 最终内部会处理成List<String>}val list : List<String> = listOf("李四", "王五", "赵六", "初七")val newList : List<String> = list.map {"你的姓名是:$it" // 每次返回一个 String}.map {"$it, 你文字的长度是:${it.length}" // 每次返回一个 String}.flatMap {listOf("$it 在学习C++", "$it 在学习Java", "$it 在学习Kotlin") // 每次返回一个集合,四次}println(newList)println()/*[你的姓名是:李四, 你文字的长度是:8 在学习C++,你的姓名是:李四, 你文字的长度是:8 在学习Java,你的姓名是:李四, 你文字的长度是:8 在学习Kotlin,你的姓名是:王五, 你文字的长度是:8 在学习C++,你的姓名是:王五, 你文字的长度是:8 在学习Java,你的姓名是:王五, 你文字的长度是:8 在学习Kotlin,你的姓名是:赵六, 你文字的长度是:8 在学习C++,你的姓名是:赵六, 你文字的长度是:8 在学习Java,你的姓名是:赵六, 你文字的长度是:8 在学习Kotlin,你的姓名是:初七, 你文字的长度是:8 在学习C++,你的姓名是:初七, 你文字的长度是:8 在学习Java,你的姓名是:初七, 你文字的长度是:8 在学习Kotlin]*/
  • 过滤函数-filter
    nameLists.flatMap {it -> it.filter {it.contains('黄') // 包含 ‘黄’ true,否则是false}}.map {print("$it   ")}
  • 合并函数-zip
    val names = listOf("张三", "李四", "王五")val ages = listOf(20, 21, 22)// RxJava zip 合并操作符// KT 自带就有zip 合并操作// 原理:就是把 第一个集合 和 第二个集合 合并起来,创建新的集合,并返回//      创建新的集合(元素,元素,元素) 元素Pair(K, V)  K代替第一个集合的元素   V代替第二个集合的元素val zip : List<Pair<String, Int>> = names.zip(ages)
  • object
    object 申明的是饿汉式式单例对象

  • @file:JvmName
    申明Kotlin file文件被JVM编译生成的Java类名

@file:JvmName("Stu") // 就是在编译器环节,修改我们的类的名字,让Java端调用更简洁
package com.ktbase.s7
// @file:JvmName("Stu") 注意:必须写在 包名的外面
// TODO 131-注解@JvmName与Kotlin
fun getStudentNameValueInfo(str : String) = println(str)
fun main() {}// Java调用
public class KtBase131 {public static void main(String[] args) {// KtBase131Kt.getStudentNameValueInfo("Derry is OK");Stu.getStudentNameValueInfo("Derry is OK a");}
}
  • @JvmField
class Person {@JvmFieldval names = listOf("Zhangsan", "Lisi", "Wangwu")
}public class KtBase132 {public static void main(String[] args) {Person person = new Person();for (String name : person.names) {System.out.println(name);}}
}
  • JvmOverloads
@JvmOverloads // 原理:编译器环节 专门重载一个函数,专门给 Java用
fun toast( name : String, sex : Char = 'M') {println("name:$name, sex:$sex")
}public class KtBase133 {public static void main(String[] args) {// Java端// KtBase133Kt.show("张三") // Java无法享用 KT的默认参数KtBase133Kt.toast("张三"); // 相当于 Java 享用 KT的默认参数}
}
  • JvmStatic
class MyObject {companion object {@JvmFieldval TARGET = "黄石公园"@JvmStaticfun showAction(name: String) = println("$name 要去 $TARGET 玩")}
}public class KtBase134 {public static void main(String[] args) {// Java 端System.out.println(MyObject.TARGET);MyObject.showAction("Kevin");}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词