如何强制对某些构造函数/函数的调用使用命名参数?

mfulton26:

我有一些构造函数和函数,总是希望使用命名参数来调用它们。有办法要求吗?

我希望能够对具有许多参数的构造函数和函数以及使用命名参数时更清晰地阅读的函数进行此操作。

mfulton26:

在Kotlin 1.0中,您可以通过使用Nothingstdlib 来执行此操作

在Kotlin 1.1+中,您将获得“ Forbidden vararg parameter type:Nothing”,但您可以通过使用私有构造函数(如Nothing定义自己的空类并将其用作第一个varargs参数来复制此模式

/* requires passing all arguments by name */
fun f0(vararg nothings: Nothing, arg0: Int, arg1: Int, arg2: Int) {}
f0(arg0 = 0, arg1 = 1, arg2 = 2)    // compiles with named arguments
//f0(0, 1, 2)                       // doesn't compile without each required named argument

/* requires passing some arguments by name */
fun f1(arg0: Int, vararg nothings: Nothing, arg1: Int, arg2: Int) {}
f1(arg0 = 0, arg1 = 1, arg2 = 2)    // compiles with named arguments
f1(0, arg1 = 1, arg2 = 2)           // compiles without optional named argument
//f1(0, 1, arg2 = 2)                // doesn't compile without each required named argument

就像Array<Nothing>Kotlin中的违法行为一样,vararg nothings: Nothing无法创建用于传递的值(我认为是缺乏反思的)。但是,这似乎有点hack,我怀疑用于空类型数组的字节码中会有一些开销,Nothing但它似乎可以正常工作。

这种方法不适用于无法使用的数据类主构造函数,vararg但可以将其标记为,private而将辅助构造函数与一起使用vararg nothings: Nothing

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift构造函数为什么使用命名参数调用?

如何使用命名参数并防止使用默认构造函数?

转到:调用函数时如何使用命名参数?

Jenkinsfile:如何使用命名参数调用groovy函数

JavaScript-使用命名构造函数

如何从Dart / Flutter中的泛型函数调用命名构造函数

如何使用命名函数调用attach / detach事件?

您如何使用命名参数来处理函数?

构造函数使用参数调用构造函数

使用非位置参数时如何强制调用抽象类构造函数?

如何使用命令中的参数调用函数

使用命名参数在Kotlin中进行Dagger 2构造函数注入

如何强制调用移动构造函数(C ++)?

在Go中可以使用命名参数调用函数吗?

我可以使用命名参数作为变量在python中调用函数吗?

将函数和参数作为参数传递给中间函数,然后调用命名函数

在类构造函数中调用命名的lambda的优势与调用实际的私有函数相比的优势

如何检查是否在dart中使用命名构造函数创建了元素?

如何使用Package对象中的参数调用ToolWindowPane构造函数?

如何使用反射获取基本构造函数调用参数

如何使用可变参数宏来调用嵌套构造函数?

如何从默认构造函数调用参数化的构造函数?

使用命名空间函数调用 google.script.run

使用命名空间从C ++调用Python函数

使用默认参数而不是默认构造函数调用构造函数

如何调用带参数的构造函数?

反射-使用参数调用构造函数

在匿名函数中使用命名函数

如何在函数中使用命名变量