2

Kotlin 文档groupBy显示每种类型的特殊形式,例如ByteArray, IntArray. 为什么会这样,为什么单一的通用形式是不够的?

inline fun <T, K> Array<out T>.groupBy(
    keySelector: (T) -> K
): Map<K, List<T>>

Kotlin 文档中的片段

inline fun <T, K> Array<out T>.groupBy(
    keySelector: (T) -> K
): Map<K, List<T>>
inline fun <K> ByteArray.groupBy(
    keySelector: (Byte) -> K
): Map<K, List<Byte>>
inline fun <K> ShortArray.groupBy(
    keySelector: (Short) -> K
): Map<K, List<Short>>
inline fun <K> IntArray.groupBy(
    keySelector: (Int) -> K
): Map<K, List<Int>>

...

问题2

似乎IntArray不是子类化Array,这可能是它必要的原因。

所以,我想知道 - 如果我想添加自己的函数,比方说verySpecialGroupBy- 这是否意味着我还需要指定不仅是一个这样的函数 - 而是为每个数组类型重复它?

或者,当您需要使用这些特殊数组并且实际上您可以为泛型定义您的函数Array而忽略其余部分时,这是一个非常具体且罕见的情况?

4

1 回答 1

1

这些数组特化适用于原始类型的数组。因此,在您创建verySpecialGroupBy函数的示例中,如果您想将它与原始类型数组一起使用,您只需要为每个特化重复它。

你可以在这个Kotlin 讨论线程中阅读更多关于原始类型数组的需求。

于 2019-06-14T01:45:23.973 回答