包含generics的Kotlin函数的内联别名?

根据我在前面的问题中收到的建议,我用“别名”缩短了一些常用的外部函数(我不能控制的)的名字。 这对扩展function很好用; 不过,我还有一些顶级函数,我想要别名。 对于一个简单的例子,考虑generateSequence函数。 我想能够做到这一点:

 // DOES NOT COMPILE inline val  seq:(()->T?)->Sequence get() = ::generateSequence 

…但是我不能这样做,因为在接收器types中必须使用generics,正如在这个答案中所解释的那样。 是否有任何其他方式来创建一个保留内联的顶级function(需要generics)别名?

编辑:我试过使用Any? 和明星投影后发布的问题,但我仍然不认为这是一个很好的答案:

 inline val seq:(()->Any?)->Sequence get() = ::generateSequence 

这似乎boptimalsu,因为它妥协对序列的元素types的types检查,正确的? 关于什么可以工作的其他答案/想法?

可以使用的选项是重命名导入,尽管它仅限于单个源文件:

 import kotlin.sequences.generateSequence as seq fun main(args: Array) { seq(1) { it + 1 }.take(10).forEach(::println) } 

除此之外,我认为,你可以做的最好的是退回到另一个内联函数:

 inline fun  seq(nextFunction: () -> T?) = generateSequence(nextFunction) 

实际上,我期望这个选项的性能比具有函数引用的性能更好,因为使用内联属性返回函数引用时,当您调用该引用时仍然有一些开销,而这个调用是内联,因此不应该引入另一个嵌套调用的开销。