数据类中的返回类型如何在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>!