Kotlin对比Java 入门学习记录(肆)

Kotlin入门学习记录
2023/11/28

安全转换

在使用类型转换时可能会转换失败导致异常,安全转换函数就是为了解决这个问题,以下为错误代码演示

//NumberFormatException: For input string: "8.98"
var number1:Int = "8.98".toInt()
println(number1)

Java代码如下

//NumberFormatException: For input string: "8.98"
int s = Integer.parseInt("8.98");
System.out.println(s);

to***OrNull安全转换函数

这种函数是尝试将字符串转换成对应的类型,如toIntOrNull()将字符串转为Int类型如果失败则返回null,代码实现,如下

var number1:Int? = "8.98".toIntOrNull()
println(number1)

Java可以使用try{}catch(){}完成类似操作,代码实现如下

Integer number1;
try {
	number1 = Integer.parseInt("8.98");
} catch (NumberFormatException e) {
    number1 = null;
}
System.out.println(number1);

Double转Int

函数作用
toInt()直接截取整数部分
roundToInt()四舍五入截取整数

代码实现如下

println(8.956756.toInt())//8
println(8.956756.roundToInt())//9

Double类型格式化

四舍五入,代码实现如下

println("%.2f".format(8.956756))//8.96

标准库函数

KT中为所有类型定义的函数

apply函数

当作配置函数使用,可以传入一个接收者,在apply函数中进行调用一系列函数,包含关键字this,如下

val file1 = File("e://test.txt")
file1.setReadable(true)
file1.setWritable(true)
file1.setExecutable(false)
//使用apply函数进行对象配置
val file2 = File("e://test.txt").apply {
    setReadable(true)
    setWritable(true)
    setExecutable(false)
}

let函数

let函数会将接收者传入lambda中而apply什么都不传,apply返回的是对象而let返回的是lamdba的最后一行,包含关键字it,代码实现如下

val result1 = listOf(4,2,3).first()
println(result1 * result1)
//使用let函数
val result = listOf(4,2,3).first().let {
    it * it
}
println(result)

小小的练习:

fun main()
    println(formatGreeting(null))//What's your name
    println(formatGreeting("LY_C"))//Welcome LY_C
}
fun formatGreeting(guestName:String?):String{
    return guestName?.let {
        "Welcome $it"
    }?:"What's your name"
}

run函数

run函数作用和apply一样但是run返回的是lambda的最后一行不是对象,包含关键字this,实现代码如下

val file = File("e://a.txt")
val test = file.run {
    readText().contains("LY_C")
}
println(test)//true

with函数

with函数和run函数差不多但是with的调用方式不同,调用with需要传递一个参数,代码实现如下

val b = with("LY_C-CRY-HHH") {
	length >= 3
}
println(b)//true

also函数

alsolet函数功能一样,但是also返回的是接收者对象而let返回lamdba最后一行表达式,尤其适合针对同一原始对象,实现代码如下

var fileContents:List<String>
File("e://a.txt")
    .also {
     	println(it.name)
    }.also {
        fileContents = it.readLines()
    }
println(fileContents)

takeif函数

takeif函数需要判断lambda中提供的条件表达式,为true时返回接收者对象,为false时返回的是null,一般适用于需要判断条件在执行任务的场景,代码实现如下

var file = File("e://a.txt")
    .takeIf { it.exists() && it.canRead() }
    ?.readText()
println(file)

takeUnless函数

takeUnlesstakeIf相反,只有判断条件为false时,takeUnless才会返回原始接收者对象,为true时返回null,代码实现如下

var file = File("e://a.txt")
    .takeUnless { it.isHidden }
    ?.readText()
println(file)

标准库函数总结

函数是否将接收者值传给lambda是否有相关作用域返回
letlambda结果
apply接收者对象
runlambda结果
withlambda结果
also接收者对象
takeIf可空型接收者对象
takeUnless可空型接收者对象

排列组合是吧 敲!

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LuKey_C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值