我正在尝试实现一个扩展函数,如果集合的大小大于某个值,它会运行一些代码块,但是我在Collection<*>部件中得到了这个错误:
如果
类型参数被另一种类型参数所限制,它就不能有任何其他边界。
守则:
fun <C, R> C.ifBiggerThan(size: Int, execute: () -> R): R where C : Collection<*>, C : R =
if (this.size > size) { execute() } else { this }有什么建议吗?
发布于 2021-02-10 14:33:30
在if分支中返回R,在else分支中返回C。结果表达式的类型是if和else分支的最特定的超级类型。在这种情况下,它将是R,因为C : R。因此,引入C类型作为R的扩展是没有意义的。结果表达式的类型仍然是R。所以,您可以将其替换为Collection<T>
fun <T> Collection<T>.ifBiggerThan(size: Int, execute: () -> Collection<T>): Collection<T> =
if (this.size > size) { execute() } else { this }https://stackoverflow.com/questions/66127868
复制相似问题