我想知道在Kotlin中,一个星号在变量名之前到底是做什么的。我在Spring boot Kotlin example中看到了这个(*args
):
@SpringBootApplication
open class Application {
@Bean
open fun init(repository: CustomerRepository) = CommandLineRunner {
repository.save(Customer("Jack", "Bauer"))
repository.save(Customer("Chloe", "O'Brian"))
repository.save(Customer("Kim", "Bauer"))
repository.save(Customer("David", "Palmer"))
repository.save(Customer("Michelle", "Dessler"))
}
}
fun main(args: Array<String>) {
SpringApplication.run(Application::class.java, *args)
}
5条答案
按热度按时间nhaq1z211#
*
运算符在Kotlin中被称为Spread Operator。Kotlin参考:
当调用
vararg
-函数时,可以单独传递参数,例如asList(1, 2, 3)
。如果你已经有了一个数组,并希望将其内容传递给函数,请使用spread运算符(用*
作为数组的前缀):它可以在传递到接受
vararg
的函数之前应用于Array。例如...
如果你有一个函数接受不同数量的参数…
使用spread运算符传递数组的元素作为参数:
备注:
*
运算符也是乘法运算符(当然)。vararg
-函数时,运算符可以在其他参数之间使用。这在这里的示例中得到了演示。apply
函数。ekqde3dh2#
除了那些直接朝着“这是什么东西!?!”,你经常会遇到这样的情况,你有一个
List
,想把它传递给一个需要vararg
的函数。为此,转换为:假设
someFunc
的最后一个参数是vararg
,其类型与列表中的元素相同。vjrehmav3#
如文档中所述,这是一个扩展运算符:
当我们调用一个vararg-function时,我们可以一个接一个地传递参数,例如:asList(1,2,3),或者,如果我们已经有一个数组,并希望将其内容传递给函数,我们使用spread运算符(在数组前面加上 *):
dm7nw8vv4#
在Java中,你可以按原样传递一个数组,但是使用spread操作符
*
解包数组的一个优点是spread操作符允许你在一个调用中合并数组中的值和一些固定值。Java不支持这个。rhfm7lfc5#
如果一个函数接受一个vararg(变量个数)参数,比如:
现在要调用这个方法,我们可以这样做:
但是如果我们在数组中有这些值,比如:
然后,要调用此方法,我们必须使用spread操作符,如:
这里,*(spread operator)将传递该数组的所有内容。
*array相当于1,2,3,4,5
但是等一下,如果我们这样称呼它:
sum(array)
它会给予我们Type Mismatch编译时错误:问题是
sum
函数接受一个vararg Int
参数(它接受的值如下:1,2,3,4,5),如果我们传递array,它将被传递为IntArray
。