Не думаю, что заголовок является лучшей формулировкой для этого вопроса, у меня есть интерфейс с двумя аргументами типа, и мне кажется, что я могу привести this
в качестве обоих типов одновременно, см. Воспроизводимый пример:
interface BaseResult<S : BaseResult<S, E>, E : BaseResult<S, E>> {
@Suppress("UNCHECKED_CAST")
fun isSuccess(): Boolean {
return try {
val a = this as S //ClassCastException expected
val b = this as E
println(a) //com.BaseResultTest$ExampleResult$Error@17d10166
println(b) //com.BaseResultTest$ExampleResult$Error@17d10166
true
} catch (e: Exception) {
false
}
}
}
Тест:
class BaseResultTest {
sealed class ExampleResult: BaseResult<ExampleResult.Success, ExampleResult.Error> {
object Success: ExampleResult()
object Error: ExampleResult()
}
@Test
fun test() {
val error = ExampleResult.Error
assertEquals(error.isSuccess(), false)
}
}
Я что-то упустил, или это ошибка в языке? Использование v1.3.61