数据类中的返回类型如何在Kotlin中工作?

所以我有这Result堂课,

sealed class Result<S, F> {
    data class Success<S, F>(val value: S) : Result<S, F>()
    data class Failure<S, F>(val value: F) : Result<S, F>()
}

当我这样做时Result.Success("Success"),返回的值为Success(value=Success). 但Success<S, F>(val value: S)返回类型是Result<S,F>().

那么怎么来的Result.Success("Success")回报Success(value=Success)?它不应该返回 的实例Result吗?

我从https://medium.com/@KaneCheshire/recreating-swifts-result-type-in​​-kotlin-f0a065fa6af1 获取了这段代码

回答

您可能误解了: Result<S, F>()这些行中的含义:

data class Success<S, F>(val value: S) : Result<S, F>()
data class Failure<S, F>(val value: F) : Result<S, F>()

您可能将其与方法和函数的返回类型的声明方式混淆了:

fun thisReturnsAnInt() : Int = 1
//                       ^^^

但这些是完全不同的语法。请注意Result<S, F>.后面的一对括号。您通常不会在返回类型中看到那些,对吗?Result<S, F>() 不表示返回类型。它声明基类Success(和Failure,在第二行),并说明如何在基类应当被初始化Success/Failure被初始化-通过传递任何参数到基类构造函数(因此空括号)。

让我们退后一步,想想我们实际上在做什么data class Success<S, F>(val value: S)。我们声明了一个名为 的类Success,并且声明了它的主构造函数有一个类型为 的参数S。因为我们在这里声明了一个构造函数,所以用: SomeType. 我们已经说明了!是Success<S, F>


以上是数据类中的返回类型如何在Kotlin中工作?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>