java - 接口中的类型参数是实际类型吗?
问题描述
不要认为标题是这个问题的最佳措辞,我有一个带有两个类型参数的接口,而且我似乎能够同时转换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
解决方案
推荐阅读
- python - 如何转换它以便 numpy 一次在整个列表上工作?
- matlab - 拉伸 polarplot() 切片
- vba - How do i hide a control in a report based on a field value
- javascript - 重新加载或刷新页面会删除 vue.js 中的授权
- css - CSS 移除子类的父类
- javascript - 我正在尝试使用 mvc JavaScript 函数启用/禁用下拉菜单
- vb.net - 当我发布我的 VS2017 项目时,它无法安装在客户站点
- python - Pandas: Aggregated and Group by - IDE: Pycharm
- vue.js - Component two-way property binding... Tri Sate checkbox
- c# - Xamarin iOS TableView 未显示