Android 具有泛型和Void/Nothing返回类型的Kotlin结果类型
我正在尝试使用Kotlin的Android 具有泛型和Void/Nothing返回类型的Kotlin结果类型,android,generics,kotlin,Android,Generics,Kotlin,我正在尝试使用Kotlin的[Result][1]类型。虽然在成功的情况下,它不会返回任何值。我无法让它返回值。下面这行给我带来了麻烦:complete(Result.success())。它不编译。我尝试了Result和Result两种方法,但都没有成功 关于如何让它工作有什么建议吗 package me.test.app import android.util.Log class Test { fun foo(complete: (Result<Nothing>)
[Result][1]
类型。虽然在成功的情况下,它不会返回任何值。我无法让它返回值。下面这行给我带来了麻烦:complete(Result.success())
。它不编译。我尝试了Result
和Result
两种方法,但都没有成功
关于如何让它工作有什么建议吗
package me.test.app
import android.util.Log
class Test {
fun foo(complete: (Result<Nothing>) -> Unit) {
if (Math.random() > 0.5) {
complete(Result.success())
} else {
complete(Result.failure(Throwable("too low")))
}
}
fun bar() {
foo { result ->
result.fold({
Log.i("APP", "Success")
})
{
Log.i("APP", "Failure")
}
}
}
}
package me.test.app
导入android.util.Log
课堂测试{
fun foo(完成:(结果)->单位){
if(Math.random()>0.5){
完成(Result.success())
}否则{
完成(结果失败(可丢弃(“过低”))
}
}
趣味酒吧(){
foo{结果->
结果:折叠({
Log.i(“应用程序”、“成功”)
})
{
Log.i(“应用程序”、“失败”)
}
}
}
}
您必须使用结果
。然后您可以这样调用complete
:
complete(Result.success(Unit))
另一个选项可能是使用
Nothing?
或Void?
作为类型,并使用Result.success(null)
完成它。尽管这取决于偏好,使用单位在我看来更干净