Java中可变参数规则:

  • 可变参数前面可以有其他参数,但是可变参数只能出现在参数列表的最后
  • 用...代表可变参数,...位于变量类型和变量名之间
  • 调用含有可变参数的方法时,编译器为该可变参数隐式创建一个数组,在方法体中以数组的形式访问可变参数

先来看看Java中的剩余参数是咋用的

public class TestVariableParemeters {

    public static void main(String[] args) {
new TestVariableParemeters().addNumbers("liuliqianxiao", 1, 2, 3, 4, 5);
} public int addNumbers(String name, int... args) {
int result = 0;
for (int i = 0; i < args.length; i++) {
result += args[i];
}
return result;
} }

Kotlin中可变参数规则:

  • 可变参数不必是函数的参数列表中的最后一个
  • 用vararg paramName: paramType格式申明一个可变参数
  • 和Java一样,在函数体内部,可以以数组的形式使用这个可变参数的形参变量

先来看看我们用Kotlin重写上面的addNumbers方法

fun main(args: Array<String>) {
User().addNumbers("liuliqianxiao",1, 2, 3, 4, 5)
} class User{
fun addNumbers(name: String, vararg args: Int): Int {
var result = 0
// for (i in args.indices) {
// result += args[i]
// }
for(it in args){
result += it
}
return result
}
}

不得不说idea真是非常智能,我将上述Java版的addNumbers方法直接拷贝粘贴到Kotlin文件中,立马提示我是否要转换成Kotlin代码,点确定就能生成Kotlin版本的addNumbers方法了。

注释掉的for循环就是自动生成的,但是我不想用它生成的那个版本,所以自己改写了for循环,但是结果都是正确的。

上述规则中说了,可变参数不必是参数里列表中的最后一个,来看看这种情况,函数怎么调用:

fun main(args: Array<String>) {
//调用的时候,给id赋值必须用命名参数形式
println(User().addNumbers("liuliqianxiao",1, 2, 3, 4, 5, id = 12345))
} class User{
//相对于上面加了最后一个固定参数id
fun addNumbers(name: String, vararg args: Int, id: Int): Int {
var result = 0
// for (i in args.indices) {
// result += args[i]
// }
for(it in args){
result += it
}
return result
}
}

再来看一个接受多种类型参数的可变参数,只需将类型设成Any即可

fun main(args: Array<String>) {
test(1,"Hello,Kotlin!",'a',User(1,"liuliqianxiao"))
} //用Any代表任意类型
fun test(vararg args: Any){
for(it in args){
println(it)
}
} class User(var id: Int,var name: String){
override fun toString(): String {
return "User(id=$id, name='$name')"
}
} //输出结果
//1
//Hello,Kotlin!
//a
//User(id=1, name='liuliqianxiao')

关于Kotlin中可变参数就说到这里吧,说的不够全面,想到哪里就说到哪里

Kotlin函数可变参数的更多相关文章

  1. c#编程基础之函数可变参数

    可变参数:int sum (params int[] values)int sum (string name,params int[] values) 注意:params参数必须是形参表中的最后一个参 ...

  2. PHP函数可变参数列表的具体实现方法介绍

    PHP函数可变参数列表可以通过_get_args().func_num_args().func_get_arg()这三个函数来实现.我们下面就对此做了详细的介绍. AD:2014WOT全球软件技术峰会 ...

  3. C 函数可变参数

    C 函数可变参数 C 语言中用 ... 表示可变参数,例如: void fun(int x ...) 头文件 cstdarg.h 中包含可变参数类型va_list和处理可变参数的三个宏: va_lis ...

  4. Python函数可变参数*args及**kwargs详解

    初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...

  5. C语言之函数可变参数

    先上一段代码: #include<cstdarg> #include<iostream> #include<string> using namespace std; ...

  6. Python新手学习基础之函数-可变参数**

    可变参数( ** ) 讲好了一颗*,那如果函数的最后一个参数带有 ** 前缀: 所有正常参数之外的其他的关键字参数都将被放置在一个字典中传递给函数. 要好好理解* 和 ** 两种可变参数哦~ 看个** ...

  7. C语言函数可变参数列表

    C语言允许使用可变参数列表,我们常用的printf函数即为可变参数函数,C标准库提供了stdarg.h为我们提供了这方面支持:该头文件提供了一些类型和宏来支持可变参数列表,包括类型va_list,宏v ...

  8. 【C语言】模拟实现printf函数(可变参数)

    一.printf函数介绍 printf功能 printf函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息. printf原型 int printf( const char* format ...

  9. C语言中函数可变参数解析

    大多数时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数.但在某些情况下希望函数的参数个数可以根据需要确定.典型的例子有 大家熟悉的函数printf().scanf ...

  10. PHP函数可变参数

    PHP自定义函数中支持可变数量的参数 在PHP 5.5 及更早的版本中,使用函数func_num_args() , func_get_arg() , func_get_args()实现: 我们举个例子 ...

随机推荐

  1. 可编程Modbus网关在非标称重仪表的应用

    1.概述 上海卓岚信息科技有限公司是一家专业提供工业物联网解决方案的高新技术企业,注册商标"ZLAN".公司研发的产品:物联网芯片.串口转以太网模块.串口服务器.可编程Modbus ...

  2. AB test样本量计算器的具体使用方法

    在实际的AB test中一般都是直接使用一些AB test计算工具求解的,一方面是公式太复杂记不住,计算也比较耗费时间,另一方面在老板眼里计算器计算反而比手动计算更不容易出错 接下来以用的比较多的ev ...

  3. java 核心编程设计模式

    简介 MVC模式 是 设计模式中的一种 模型:存储内容 视图:显示内容 控制器:处理用户输入

  4. java 接口sort comparable

    简介 java 没有对于多继承的实现,为了间接实现多继承,采用了接口的概念 code package cn; import java.util.Arrays; public class Employe ...

  5. flowable适配人大金仓Kingbase数据库

    背景 因为国产化的需求,需要把现有项目的数据库改成人大金仓,适配某个项目的时候因为使用了未适配Kingbase的flowable,导致无法启动. 原本使用的是Oracle数据库,kingbase兼容O ...

  6. RestCloud API管理门户,API接口治理平台

    API管理门户主要管理企业内部及外部的所有API,RestCloud API门户支持通过Java代码中的注解自动扫描生成API文档.通过OpenAPI3.0标准文档导入.JSON格式数据导入等多种方式 ...

  7. MCU/CPU/*PU的 WatchDog/看门狗 使用注意事项

    MCU/CPU/*PU的 WatchDog/看门狗 使用注意事项 类比于 Heartbeat/心跳 检测多用在软件及服务领域, WatchDog/看门狗 多用在硬件与系统领域(硬件看门狗), 也有用在 ...

  8. JAVA基础-2-注释--九五小庞

    注意:注释不会执行,注释是给人看得   注释的类型都有什么呢? 单行注释 多行注释 文档注释   测试代码 public class HelloWord { public static void ma ...

  9. swagger文档生成html静态文档

    现在基于OpenApi开发的接口,可以生成swagger,开启swagger UI使用起来非常方便,由于需要对外开放接口,将swagger暴露还是不太方便,需要生成静态的html文档,可以让第三方对接 ...

  10. Codeforces Round 766 (Div. 2) 比赛报告

    0 比赛经过 比赛还没开始的时候就感觉状态不太好.果然. 总归到底都是一个心态问题. A 题经过 看 A 题,结果半天看不懂,一开始没有注意到一定要在黑格子上操作.扔到 DeepL 上翻译了一下,再手 ...