我正在try 在Kotlin中实现偏向正确的任一类型,并且我在平面映射声明中(而不是在实现中)遇到了协方差问题:
Type parameter L is declared as 'out' but occurs in 'in' position in type
个
sealed class Either<out L, out R> {
abstract fun isLeft(): Boolean
abstract fun isRight(): Boolean
abstract fun <R2> flatMap(f: (R) -> Either<L, R2>): Either<L, R2>
fun <R2> map(f: (R) -> R2): Either<L, R2> = flatMap { Right(f(it)) }
}
data class Left<L>(val l: L): Either<L, Nothing>() {
override fun isLeft(): Boolean = true
override fun isRight(): Boolean = false
override fun <R2> flatMap(f: (Nothing) -> Either<L, R2>): Either<L, R2> = this
}
data class Right<R>(val r: R): Either<Nothing, R>() {
override fun isLeft(): Boolean = false
override fun isRight(): Boolean = true
override fun <R2> flatMap(f: (R) -> Either<Nothing, R2>): Either<Nothing, R2> = f(r)
}
可以用打字来解决吗?我宁愿不陷入when
个条款的外部功能