Kotlin - 返回结果 Result
创始人
2024-02-27 02:53:41

public value class Result  internal constructor( internal val value: Any? ) : Serializable

  • 对于一些需要关心结果的操作,成功时需要得到数据,失败时需要得到信息。返回的 Result 只能是 success 或 failure 中的一种,success持有一个泛型数据T,failure持有一个异常Throwable。
  • 是一个 value class 意味着是为了安全用来对数据进行包装(装箱)的强类型,返回值是 Serializable 意味着被包装的数据类型需要实现序列化否则抛异常 NotSerializableException。泛型是 上限定意味着只能作为生产者,即结果只能被读取。形参类型是 Any? 因为成功传入的是值T失败传入的是异常Throwable。

success( )

failure( )

public inline fun success(value: T): Result = Result(value)

//成功时调用,来包装返回的值。

public inline fun failure(exception: Throwable): Result = Result(createFailure(exception))

//失败时调用,来包装返回的异常。

.isSuccess

.isFailure

public val isSuccess: Boolean get() = value !is Failure

返回的结果是成功吗

public val isFailure: Boolean get() = value is Failure

返回的结果是失败吗

onSuccess( )

onFailure( )

public inline fun Result.onSuccess(action: (value: T) -> Unit): Result

public inline fun Result.onFailure(action: (exception: Throwable) -> Unit): Result

返回的结果是成功或失败时的回调,做一些操作。

getOrNull( )

Result.getOrThrow( )

Result.getOrElse( )

Result.getOrDefault( )

public inline fun getOrNull(): T?

返回的结果是成功就得到值,失败就得到null,不关心异常。

public inline fun Result.getOrThrow(): T

返回的结果是成功就得到值,失败就抛异常,不处理异常。

public inline fun Result.getOrElse(onFailure: (exception: Throwable) -> R): R

返回的结果是成功就得到值,失败就执行传入的onFailure来处理异常并返回一个值。

public inline fun Result.getOrDefault(defaultValue: R): R

返回的结果是成功就得到值,失败就得到默认值。

exceptionOrNull( )

public fun exceptionOrNull(): Throwable?

返回的结果是失败就得到异常,成功就得到null,不关心值。

runCatching( )

public inline fun runCatching(block: () -> R): Result

public inline fun T.runCatching(block: T.() -> R): Result

执行block,成功就返回值,发生异常就返回失败。

Result.fold( )

public inline fun Result.fold(
    onSuccess: (value: T) -> R,
    onFailure: (exception: Throwable) -> R
): R

返回的结果是成功就执行传入的onSuccess将T值转换成R值返回,

返回的结果是失败就执行传入的onFailure来处理异常并返回一个值。

Result.map( )

Result.mapCatching( )

public inline fun Result.map(transform: (value: T) -> R): Result

返回的结果是成功就执行传入的transform将T值转换成R值返回,

返回的结果是失败或者执行传入的transform发生异常都返回异常。

public inline fun Result.mapCatching(transform: (value: T) -> R): Result

返回的结果是成功就组合执行runCatching(transform),transform将T值转换成R值,执行成功就返回R值,执行异常就返回异常。

返回的结果是失败或者执行传入的transform发生异常都返回异常。

Result.recover( )

Result.recoverCatching( )

public inline fun Result.recover(transform: (exception: Throwable) -> R): Result

返回的结果是成功就返回值,

返回的结果是失败就执行传入的transform处理异常并返回一个值。

public inline fun Result.recoverCatching(transform: (exception: Throwable) -> R): Result

返回的结果是成功就返回值,

返回的结果是失败就执行传入的transform处理异常并返回一个值,执行成功就返回值,执行失败就返回异常。

val boolean = true
fun demo() = if (boolean) Result.success(123) else Result.failure(Exception())
val result = demo()
println(result.isFailure)   //打印:false
result.onSuccess { println(it) }    //打印:123
val recover = result.recover { 5 }
println(recover)    //打印:Success(123)

相关内容

热门资讯

应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...