Kotlin文档是否正确?

时间:2017-05-27 16:46:21

标签: kotlin

代码(如下所示)是否正确?这是从Kotlin-docs.pdf的第63页开始的,它也是https://kotlinlang.org/docs/reference/generics.html的最后一个代码片段

 fun <T> cloneWhenGreater(list: List<T>, threshold: T): List<T> 
 where T : Comparable, T : Cloneable {
 return list.filter { it > threshold }.map { it.clone() }
 }

按原样执行,编译器失败: 1. 在kotlin 中定义的接口Comparable需要一个类型参数 2. 类型推断失败。预期类型不匹配:推断类型为List但预期列表为 3. 无法访问&#39;克隆&#39;它受到

的保护

通过将代码更改为以下内容,可以轻松解决前两个错误:

 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() }
}

我仍然收到以下错误: 无法访问&#39;克隆&#39;它受到

的保护

我使用的是Kotlin 1.1.2-release-IJ2017.1-1

我错过了什么吗?或者文档中是否有错误?

感谢。

1 个答案:

答案 0 :(得分:0)

it.clone()返回Any,您会收到错误,将列表转换为列表。 所以,您已将其更改为List。

您的下一个错误是无法访问克隆:它在Cloneable 中受到保护。

这个问题可以通过使用公共方法创建我们自己的Cloneable接口来解决。