kotlin学习笔记——变量、可空与非空

可缺省参数默认值、可空参数与java重载注解

java中的重载,在kotlin中通过为可缺省参数提供默认值来实现,添加@JvmOverloads注解是为了转换成java代码时,自动生成重载函数,kotlin中为可缺省参数提供默认值写法如下

@JvmOverloads   //包含可缺省默认参数和可空参数,增加java重载注解
fun addProduct(name: String, price: Double = 0.0, desc: String? = null) =
    "Adding product with $name, ${desc ?: "None"}, and " + NumberFormat.getCurrencyInstance()
        .format(price)

上面addProduct方法只有一行,可以简化用 = 号,省略{ }函数体括号,类似于python中的lambda方法
等同于下方常规写法:

@JvmOverloads   //包含可缺省默认参数和可空参数,增加java重载注解
fun addProduct(name: String, price: Double = 0.0, desc: String? = null){
    "Adding product with $name, ${desc ?: "None"}, and " + NumberFormat.getCurrencyInstance()
        .format(price)
}

可通过以下代码测试

@Test
fun `check all overloads`() {
    println(addProduct("Name_", 5.0, "Desc"))
    println(addProduct("Name_", 5.0))
    println(addProduct("Name_"))
}

类的构造函数重载类似,在类名后加@JvmOverloads注解,并声明constructor

//类的构造函数重载方法中包含可省略的默认参数时,@JvmOverloads重载,后面显示声明 constructor
data class Porduct @JvmOverloads constructor(
    val name: String,
    val price: Double = 0.0,
    val desc: String? = null
)

显式类型转换

与java的int、long等原生数据类型不同,kotlin中的Int和Long等都是类,所以不会自动转换,需要显式转换

  1. 使用toInt() toLong()等显式转换函数
  2. +号操作符重载隐式转换为+前面的类型
fun test3() {
   var intVar: Int = 3
   val longVar: Long = intVar.toLong()
   val byteVar: Byte = intVar.toByte()
   val charVar: Char = intVar.toChar()
   val shortVar: Short = intVar.toShort()
   val floatVar: Float = intVar.toFloat()
   val doubleVar: Double = intVar.toDouble()
   val intVar2: Int = doubleVar.toInt()

   val longVar2 = intVar.toLong()

   //+号操作符重载隐式转换至前面的类型
   val longVar3 = 0L + intVar
   val stringVar = "" + intVar

   var longVar4 = intVar.toLong()
}

打印不同的进制

java中用Integer.toString(int, int)第一个int是带转换的值,第二个int是进制
kotlin中使用Java的方法,并使其成为Byte、Short、Int以及Long的扩展函数:toString(radix: Int)

var a = 42
println(a.toString(8))  //打印a的八进制:52
println(36.toString(5)) //打印36的五进制:121
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值