首页 > 其他分享 >kotlin的函数关于可变参数使用vararg

kotlin的函数关于可变参数使用vararg

时间:2023-10-15 16:45:56浏览次数:30  
标签:vararg Int kotlin 使用 参数 可变 values

前提:kotlin在编译的时候会转换成对应的java

一、java的可变参数类型:

  java类型的类似: void func(Integer... values) {}

     那么对应的kotlin的类型类似:fun func(vararg values: Int?) {}

    注意:这里我使用的是Int? 是可空的意思,那么到java层的时候会转换成Integer, 如果不加? 到底层会转换成int; 是因为当kotlin编译器认为形参不可为空的时候,完全可以用非包装的类型来接受参数,更合理的利用资源。

 

二、kotlin传入的参数

1、针对vararg可变参数,kotlin 有两种不同的参数传递

fun testIntListArgs(vararg values: Int) { // kotlin编译器解析为int.. values类型
    println(values.asList())
}

val args = intArrayOf(4,5,6)  // 因为是int... 的方式,所以这里必须用int[] 的类型
testIntListArgs(*args) // 使用*args的方式
testIntListArgs(4,5,6) // 使用可变参数传入的方式

如上,一种是使用*args的方式,一种是使用可变参数传入的方式

如果要强制编译器解析为包装类型的 Integer... values 则需要改为:vararg values: Int?

2、上述刚好使用可优化的Int,其他可使用非包装类型的参数也是会被kotlin编译器优化的

3、其他的包装类型则可以直接使用arrayOf() 

fun testListStringArgs(vararg values: String) {
    println(values.asList())
}

val strArr = arrayOf("aa", "bb") // 这里直接使用arrayOf
testListStringArgs(*strArr) 

4、因为是数组,所以不能使用listOf的方式, 如果非得要使用list的方式,则需要先转换为array: testListStringArgs(*strings.toTypedArray())

 

标签:vararg,Int,kotlin,使用,参数,可变,values
From: https://www.cnblogs.com/czwlinux/p/17765773.html

相关文章

  • Kotlin反射从父类获取子类成员属性
    背景有部分需求需要反射获取相关信息,例如,由于子类太多100+,需要在父类写toString方法涵盖子类的相关信息实现过程逻辑通过反射获取子类构造方法的参数通过当前实例调用参数的获取方法,获取参数值在父类的toString中输出和组建toString代码获取构造方法的参数valpc=t......
  • kotlin基础知识
    一、if的使用1、if和java不一样的是:if是有结果的表达式函数的返回值可以是:returnif(a>b)aelseb;类似于java的returna>b?a:b;可能是这个原因所以kotlin没有这个三目运算符 二、函数体kotlin除了循环外,大部分控制结构都是表达式体1、函数体分为:代码块体和表......
  • 03_变量与值可变性
    rust定义变量let关键字用于声明变量:let(mut)变量名变量值是否改变默认变量值不可变(Immutable),在声明变量时加上mut才为可变变量。letx=5;x=6;letmuty=6;y=8;letmuty:u32=9;第二行编译报错,上边变量声明时未标注类型的,默认是i32类型。rust定义......
  • Kotlin协程的异常处理
    捕获异常Kotlin协程中执行的代码如果可能发生异常,最简单直接的办法也是可以通过try-catch语句来捕获异常GlobalScope.launch{try{println(1/0)}catch(e:Exception){//cancatchexception}}但try-catch只能捕获该协程代码块中......
  • 无涯教程-Kotlin - 简介
    Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言,其名称来自于圣彼得堡附近的科特林岛。2012年1月,著名期刊《Dr.Dobb'sJournal》中Kotlin被认定为该月的最佳语言。虽然......
  • kotlin协程的基础笔记
    导包在Android项目中需要导入:implementation"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"implementation"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3"通过maven树可以分析:|||\---org.jetbrains.kotlinx:kotlinx-coroutine......
  • 可变参数函数原理
    可变参数列表我们想通过一个例子来引出我们这个话题.如果我们想要求两个数的最大值,这个函数是非常容易的.intGetMax(intx,inty){if(x>y){returnx;}returny;}intmain(){inta=10;intb=20;intmax=......
  • Kotlin | 在for、forEach循环中正确的使用break、continue
    Kotlin有三种结构化跳转表达式:return:默认从最直接包围它的函数或者匿名函数返回。break:终止最直接包围它的循环。continue:继续下一次最直接包围它的循环。for循环中使用break、continuefor(iin1..5){if(i==3)break//1这里分别使用breakcontinuereturnprintl......
  • Kotlin-大师班 第五章-随笔
    数组Array1.基础数据类型Array 2.arrayOf:基础类型、字符串、自定义类对象,甚至类,甚至不同类型放在这一个数组里。 3.不可变集合三兄弟,除了他们仨后面的都可变。 4.可变集合ArrayList,arrayListOf,mutabalListOfmutableSetOf,hashSetOfHashMap,hashMapOf,mutableMa......
  • Kotlin 基础语法
    Kotlin文件以.kt为后缀。包声明包的声明应处于源文件顶部:packagemy.demoimportjava.util.*//……kotlin源文件不需要相匹配的目录和包,源文件可以放在任何文件目录。如果没有指定包,默认为 default 包。默认导入有多个包会默认导入到每个Kotlin文件中:kotlin.*kotlin.an......