有一个密封类的Result,其参数有两种类型:成功结果(T)和错误类型(R)。
它由两个类继承:
a。成功-数据类,在构造函数中接受对象T
b。错误-数据类,在构造函数中接受对象R
我需要创建一个函数,该函数返回Result对象。该函数必须以以下方式创建:
Result<Number, String>
Result<Any, String>
Result<Int, CharSequence>
Result<Int, Any>
那是结果类必须在T参数上协变而在R参数上不变。
答案 0 :(得分:1)
您可以在结果类的声明中使用Kotlin提供的declaration-site variance。
T
->默认情况下,T是不变的out T
->使T协变in T
->使T变质示例:
sealed class Result<out T, R>(val left: T? = null, val right: R? = null) {
class Success<T, R>(data: T) : Result<T, R>(left = data)
class Error<T, R>(data: R) : Result<T, R>(right = data)
}
fun main() {
val res1 = Result.Success<String, Int>("Test")
val res2: Result<Any, Int> = res1 // compiles successfully, T is covariant
val res3: Result<String, Any> = res1 // doesn't compile, R is invariant (Type Mismatch)
}
一个函数可以将Result返回为:
fun returnResult(): Result<String, Int> {
val random = Random.nextBoolean() // random, for demonstration
retrun if(random) {
Result.Success("Success Example")
} else {
Result.Error(404)
}
}