Kotlin文档是否正确?
代码(如下所示)正确吗?它取自Kotlin-docs.pdf的第63页,这也是Kotlin文档是否正确?,kotlin,Kotlin,代码(如下所示)正确吗?它取自Kotlin-docs.pdf的第63页,这也是 fun cloneWhenGreater(列表:列表,阈值:T):列表 式中T:可比,T:可克隆{ return list.filter{it>threshold}.map{it.clone()} } 按原样执行,编译器会出现以下故障: 1. kotlin中定义的可比较接口需要一个类型参数 2. 类型推断失败。预期类型不匹配:推断类型为列表,但预期为列表 3. 无法访问“克隆”:它在“可克隆”中受保护。 通过将代码
fun cloneWhenGreater(列表:列表,阈值:T):列表
式中T:可比,T:可克隆{
return list.filter{it>threshold}.map{it.clone()}
}
按原样执行,编译器会出现以下故障:
1. kotlin中定义的可比较接口需要一个类型参数
2. 类型推断失败。预期类型不匹配:推断类型为列表,但预期为列表
3. 无法访问“克隆”:它在“可克隆”中受保护。
通过将代码更改为以下内容,可以轻松解决前两个错误:
fun <T> cloneWhenGreater(list: List<T>, threshold: T): List<Any>
where T : Comparable<in T>, T : Cloneable {
return list.filter { it > threshold }.map { it.clone() }
}
fun cloneWhenGreater(列表:列表,阈值:T):列表
式中T:可比,T:可克隆{
return list.filter{it>threshold}.map{it.clone()}
}
我仍然得到以下错误:
无法访问“克隆”:它在“可克隆”中受保护。
我正在使用Kotlin 1.1.2-release-IJ2017.1-1
我错过什么了吗?还是文档中有错误
谢谢。it.clone()
返回Any
,您将得到错误强制列表。
所以,您已将其更改为列表
您的下一个错误是无法访问克隆:它在克隆中受保护
这个问题可以通过使用公共方法创建我们自己的可克隆接口来解决。文档似乎确实是错误的。你应该提交一个bug:这个特定的bug被剪掉了,而且只有一次被修改过,一次修改使它更糟。也许当时它确实编译过,但当时Kotlin仍处于快速开发阶段。谢谢!提交了一个bug()。将相应更新。
fun <T> cloneWhenGreater(list: List<T>, threshold: T): List<Any>
where T : Comparable<in T>, T : Cloneable {
return list.filter { it > threshold }.map { it.clone() }
}