Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin通用集合强制转换_Kotlin - Fatal编程技术网

Kotlin通用集合强制转换

Kotlin通用集合强制转换,kotlin,Kotlin,我是Kotlin的新手,正在研究一个简单的方法,该方法可以对列表进行排序并将其连接到字符串 private fun generateKey(params: Array<Any>): String { val genericCollection = if (params.isNotEmpty() && params[0] is Collection<*>) params[0] as Collection<*>

我是Kotlin的新手,正在研究一个简单的方法,该方法可以对列表进行排序并将其连接到字符串

private fun generateKey(params: Array<Any>): String {
    val genericCollection  = if (params.isNotEmpty() && params[0] is Collection<*>) params[0] as Collection<*>
                    else throw Exception("no params provided for keyGenerator")

    return genericCollection.sortedBy { it }.joinToString(separator = "_")
}
private-fun-generateKey(参数:数组):字符串{
val genericCollection=if(params.isNotEmpty()&¶ms[0]是集合)params[0]作为集合
else抛出异常(“没有为keyGenerator提供参数”)
返回genericCollection.sortedBy{it}.joinToString(separator=“\”)
}
但我有一个编译错误:

中为R绑定的类型参数

inline fun>Iterable.sortedBy(交叉内联 选择器:(T)→ R?:列表

不满足:推断类型Any不是的子类型 可比


您知道如何解决此问题吗?

问题是您尝试通过
it
对此集合进行排序。但是
它可以是任何类型的实例。
然而,
Any
不是可以比较的东西(
Any
没有实现
Comparable
接口)

因此,当您使用
sortedBy
方法时,您必须提供一些可以比较的东西。例如:

return genericCollection.sortedBy { it.hashCode() }.joinToString(separator = "_")
hashCode()
返回
Int
Int
可以很容易地进行比较


事实上,除非您将
用作泛型类型,否则您将无法找到更好的方法来比较集合。

问题是您试图通过
对集合进行排序。但是
它可以是任何类型的实例。
然而,
Any
不是可以比较的东西(
Any
没有实现
Comparable
接口)

因此,当您使用
sortedBy
方法时,您必须提供一些可以比较的东西。例如:

return genericCollection.sortedBy { it.hashCode() }.joinToString(separator = "_")
hashCode()
返回
Int
Int
可以很容易地进行比较


事实上,除非您将
用作泛型类型,否则您将无法找到更好的方法来比较集合。

猜一猜,您必须了解,您对param[0]的确切期望是什么。在这种情况下,它必须是一些keyGenerator参数。很确定,这些参数可以是字符串或数字类型。您所需要的只是通过强制转换将它们映射到适当的类。例如,字符串类:

private fun generateKey(params: Array<Any>): String {
        val genericCollection  = if (params.isNotEmpty() && params[0] is Collection<*>) params[0] as Collection<*>
        else throw Exception("no params provided for keyGenerator")

        return genericCollection.map { it as String }.sortedBy { it }.joinToString(separator = "_")
    }
private-fun-generateKey(参数:数组):字符串{
val genericCollection=if(params.isNotEmpty()&¶ms[0]是集合)params[0]作为集合
else抛出异常(“没有为keyGenerator提供参数”)
返回genericCollection.map{it as String}.sortedBy{it}.joinToString(separator=“\u1”)
}

猜一猜,您必须理解,您对param[0]的期望到底是什么。在这种情况下,它必须是一些keyGenerator参数。很确定,这些参数可以是字符串或数字类型。您所需要的只是通过强制转换将它们映射到适当的类。例如,字符串类:

private fun generateKey(params: Array<Any>): String {
        val genericCollection  = if (params.isNotEmpty() && params[0] is Collection<*>) params[0] as Collection<*>
        else throw Exception("no params provided for keyGenerator")

        return genericCollection.map { it as String }.sortedBy { it }.joinToString(separator = "_")
    }
private-fun-generateKey(参数:数组):字符串{
val genericCollection=if(params.isNotEmpty()&¶ms[0]是集合)params[0]作为集合
else抛出异常(“没有为keyGenerator提供参数”)
返回genericCollection.map{it as String}.sortedBy{it}.joinToString(separator=“\u1”)
}

谢谢您的回答,您是否有更好的方法实现的想法?请使用其他类型。如果不提供如何对集合进行排序的信息,则无法对集合进行排序。您将如何对任何类型的集合进行排序?我的意思是,不是实现,但你会使用什么属性?谢谢你的回答,你有没有更好的方法实现的想法?使用其他类型。如果不提供如何对集合进行排序的信息,则无法对集合进行排序。您将如何对任何类型的集合进行排序?我的意思是,不是实现,但你会使用什么属性?