在kotlin中,如何将函数引用放入数组中

在kotlin中,如何将函数引用放入数组中,kotlin,function-reference,Kotlin,Function Reference,具有类成员函数,如: private fun getData1(uuid:String): IData? { ... } private fun getData2(uuid:String): IData? { ... } private fun getData3(uuid:String): IData? { ... } 并希望放入函数引用数组: var funArray = ArrayList<(uuid: String) -> IData?> (

具有类成员函数,如:

private fun getData1(uuid:String): IData? {
    ...
}
private fun getData2(uuid:String): IData? {
    ...
}
private fun getData3(uuid:String): IData? {
    ...
}
并希望放入函数引用数组:

var funArray = ArrayList<(uuid: String) -> IData?> (
     this::getData1, 
     this::getData2, 
     this::getData3)
如何在数组中放置函数引用?

第一次尝试失败,因为ArrayList没有接受变量参数值列表的构造函数

如果需要可变性,可以通过使用或替换ArrayList来获得几乎相同的效果,因为这需要一个vararg列表:

var functions = listOf<(uuid: String) -> IData?>(
    this::getData1, 
    this::getData2, 
    this::getData3)
列表可能比Kotlin中的数组使用得更广泛,因为它们更灵活。您可以在许多具有不同特征的不同实现之间进行选择。它们在泛型中工作得更好;例如,您可以创建泛型类型的列表。您可以使它们不可变。当然,如果它们是可变的,它们可以增长和收缩

但是数组也有自己的位置,特别是在性能很重要的情况下,您需要与使用数组和/或大小固定的代码进行互操作。

第一次尝试失败,因为ArrayList没有采用变量参数值列表的构造函数

如果需要可变性,可以通过使用或替换ArrayList来获得几乎相同的效果,因为这需要一个vararg列表:

var functions = listOf<(uuid: String) -> IData?>(
    this::getData1, 
    this::getData2, 
    this::getData3)
列表可能比Kotlin中的数组使用得更广泛,因为它们更灵活。您可以在许多具有不同特征的不同实现之间进行选择。它们在泛型中工作得更好;例如,您可以创建泛型类型的列表。您可以使它们不可变。当然,如果它们是可变的,它们可以增长和收缩


但是数组也有它的位置,特别是在性能很重要的情况下,您需要与使用数组的代码进行互操作,并且/或者数组的大小是固定的。

ArrayList不是数组。如果列表确实需要可变,为什么不直接使用listOf或mutableListOf呢。如果您真的想要一个ArrayList,请使用ArrayList。ArrayList不是数组。如果列表确实需要可变,为什么不直接使用listOf或mutableListOf呢。如果确实需要ArrayList,请使用ArrayList。
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
var functions = listOf<(uuid: String) -> IData?>(
    this::getData1, 
    this::getData2, 
    this::getData3)
var functions = arrayOf<(uuid: String) -> IData?>(
    this::getData1, 
    this::getData2, 
    this::getData3)