kotlin - 为什么Kotlin中的groupBy通用形式还不够?

标签 kotlin

Kotlin的groupBy文档显示了每种类型的特殊形式,例如ByteArrayIntArray。为什么会这样,为什么单一的通用形式还不够?

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

片段from Kotlin documentation
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定义函数而忽略其余函数?

最佳答案

这些数组专门用于原始类型的数组。因此,在创建verySpecialGroupBy函数的示例中,如果您想将其与原始类型数组一起使用,则只需对每个专门化重复此操作。

您可以在Kotlin discussion thread中阅读有关基本类型数组需求的更多信息。

关于kotlin - 为什么Kotlin中的groupBy通用形式还不够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56590302/

相关文章:

multithreading - Kotlin 实现多线程请求对冲?

android - android studio IDE中的Kotlin编译器预发布问题

Kotlin:尝试,捕捉,并且只有在最后出现错误时

Kotlin - 委托(delegate)链

kotlin - 为什么 Sinks.many().multicast().onBackpressureBuffer() 在订阅者之一取消订阅后完成以及如何避免它

android - 如何获取对象内部的上下文?

android - Kotlin 无法识别类型参数

android - Anko 对话框按钮标题

android - Kotlin gradle 多级项目问题

android - 放置图标的底部应用栏问题