def computeComplexNumber: () ? Future[Int] =
() ?
Future {
println("Computing complex number ...")
Int.MaxValue
}
def convert(f: () ? Future[Int]): Future[() ? Int] = ???
convert(computeComplexNumber)
Run Code Online (Sandbox Code Playgroud)
是否可以实现convert具有上述签名的方法,条件是当convert(computeComplexNumber)调用时,除非您这样做,否则不会打印任何内容
Await.result(convert(computeComplexNumber), 5.seconds)()
Run Code Online (Sandbox Code Playgroud) 我有以下代码片段,我想从同一代码库内部访问scriptDsl属性Java。我不想公开曝光scriptDsl。
class ScriptDsl {
internal val scriptDsl: JScriptDsl by lazy { //... }
}
Run Code Online (Sandbox Code Playgroud)
当编译时,scriptDsl变为,public final JScriptDsl getScriptDsl$esw_ocs_dsl_kt()但我想在此处提供自定义名称,这对于使用的非委托属性是可能的JvmName("scriptDsl")。怎么做呢internal delegated properties?
如果还有其他更好的解决方案,我很好,我的要求是“
scriptDsl在同一模块中从Java 调用ScriptDsl是公开的,我不希望scriptDsl在模块外部访问属性scriptDsl 必须懒惰,因为它依赖于声明时可能不可用的其他属性注意:我知道internalKotlin public中的Java。
来自kotlin文档:
内部声明在Java中公开。内部类的成员会经历名称重整,以使其更难从Java中意外使用它们,并允许重载具有相同签名且根据Kotlin规则彼此不可见的成员。
为什么跟随签名会Unsupported [suspend operator "getValue"]导致编译错误?
suspend operator fun getValue(thisRef: Any?, property: KProperty<*>): T
Run Code Online (Sandbox Code Playgroud)
是因为技术上的限制吗?