【发布时间】:2017-12-06 23:03:50
【问题描述】:
根据我在an earlier question 中收到的建议,我用“别名”缩短了一些常用的外来函数(我无法控制)的名称。这对于扩展功能很有效;但是,我还有一些我想别名的顶级函数。对于一个简化的示例,请考虑 generateSequence 函数。我希望能够做到这一点:
// DOES NOT COMPILE
inline val <T:Any> seq:(()->T?)->Sequence<T> get() = ::generateSequence
...但我不能,因为必须在接收器类型中使用泛型,正如in this answer 所解释的那样。是否有任何其他方法可以为保留内联的顶级函数(需要泛型)创建 别名?
编辑:我在发布问题后立即尝试使用Any? 和星形投影,但我仍然认为这不是一个好的答案:
inline val seq:(()->Any?)->Sequence<*> get() = ::generateSequence
这似乎是最理想的,因为它损害了对序列元素类型的类型检查,对吗?关于什么可行的其他答案/想法?
【问题讨论】:
标签: generics properties kotlin inline