网站首页 > 文章精选 正文
1. 扩展函数:
Kotlin的扩展函数允许在不直接修改现有类代码的情况下增加新的函数。这在你无法修改类或希望代码干净有序的情况下非常实用。
// 扩展函数示例 1
fun View.gone(){
visibility =View.GONE
}
fun View.visible(){
visibility =View.VISIBLE
}
// 使用
textView.hide()
// 扩展函数示例 2
// 该扩展函数将字符串的首字母大写
fun String.capitalizeFirstLetter(): String {
if (isEmpty()) return this
return substring(0, 1).toUpperCase() + substring(1)
}
// 使用
fun main() {
val input = "this is kotlin"
val outputString = input.capitalizeFirstLetter()
println(outputString)
}
// 输出: This is kotlin
2. 使用 let, run, apply, 和 also 扩展功能: Kotlin作用域函数
选择合适的作用域函数,请参考以下表格
函数上下文返回值let:"this"lambda函数的结果apply:"this"当前上下文对象with:"this"lambda函数的结果run:"this"lambda函数的结果also:"it"当前上下文对象
详情参考《Kotlin技巧:作用域函数let、run、with、apply和also》
3. 高阶函数
在Kotlin中,可以接受函数作为参数的函数或者可以返回函数的函数被称为高阶函数。
fun add(a: Int, b: Int): Int{
var sum = a + b
return sum
}
// higher-order function definition
fun higherfunc(addfunc:(Int,Int)-> Int){
// invoke regular function using local name
var result = addfunc(3,6)
print("The sum of two numbers is: $result")
}
fun main(args: Array<String>) {
// invoke higher-order function
higherfunc(::add)
}
// output::The sum of two numbers is: 9
4. 使用when表达式
- 在Kotlin中,when的工作方式和其他语言中的switch很相似,但是它更加智能和灵活。
- 使用 Kotlin 的一件很酷的事情是,不需要像其他语言(如 Java)那样添加中断break。一旦找到匹配项,它就会运行该代码并从 when 块继续。
- 替换冗长的“if-else-if”链,以获得更清晰的条件逻辑。
示例 1:范围
val age = 20
when (age) {
in 18..25 -> println("Young adult")
in 26..60 -> println("Adult")
else -> println("Not considered an adult")
}
示例 2:使用 when 作为表达式
fun main() {
var weekDay = 3
var day= when(weekDay) {
1->"Monday"
2->"Tuesday"
3->"Wednesday"
4->"Thursday"
5->"Friday"
6->"Saturday"
7->"Sunday"
else-> "Not a week day"
}
print(day)
}
- 优点:
- 增强代码的可读性和可维护性。
- 避免嵌套 if 语句以获得更清晰的逻辑。
5. Null安全和安全转换操作符
- 空安全
- Kotlin 的 null 安全性由编译器强制执行,旨在通过消除代码中存在风险的 null 引用来防止 NullPointerExceptions。
var a: String = "kotlin" // Regular initialization means non-nullable by default
a = null // compilation error
要允许空值,可以通过编写 String? 将变量声明为可为空字符串:
var b: String? = "kotlin" // can be set to null
b = null
print(b)
- 安全调用 Kotlin 安全调用运算符?允许访问字段或调用可为空变量的方法。特别是,仅当变量的引用不为空时,该运算符才对变量执行操作。否则,返回 null。例如:
fun main() {
val a: String? = "kotlin"
// it returns a's length, or null if a in null
println(a?.length)
// it returns a's value in uppercase, or null if a in null
println(a?.uppercase())
}
安全转换
如果对象不是目标类型,则常规强制转换可能会导致 ClassCastException。另一种选择是使用安全强制转换,如果尝试不成功,则返回 null。
val obj: Any = "Kotlin"
val str: String? = obj as? String
猜你喜欢
- 2025-07-17 阿里云短视频 SDK For Android 快速接入
- 2025-07-17 谈谈 Unsafe 在 Java 中的作用(unsafe_unretained)
- 2025-07-17 Spring Native 中文文档(spring文档中文版)
- 2025-07-17 Java线程池ThreadPoolExecutor实现原理剖析
- 2025-07-17 以后我准备告别String.format()了,因为它不够香!
- 2025-07-17 你真的了解java中的泛型吗?(java的泛型及实现原理)
- 2025-07-17 框架拦截器的秘密:责任链模式全解析!
- 2025-07-17 MapStruct架构设计(mapstruct官方文档)
- 2025-07-17 迭代器模式进阶:遍历数据时,为何不能修改集合?
- 2025-07-17 工厂、建造者、装饰器、适配器:解密JDK设计模式的实战妙用
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)