如何在when子句中断言一个对象是否具有另一个对象的祖先?

问题描述 投票:0回答:1

因此,正如标题所示,我需要检查对象是否是从给定类继承的。

我编写了一个函数(下面的代码片段),它检查一个项目是否是给定类的实例,但我想检查它是否是 KView 类的后代,而不是直接子代(如我想要它检查它的祖先,直到找到 KView 或到达根祖先)。

在 Kotlin 中是否可能?如果可以,我可以在

when
子句中使用它吗?

when (item) {
    is KRecyclerView -> item.assertWithCondition { isVisibleAndEnabled() }
    is KView -> item.assertWithCondition { isVisibleAndEnabled() }
    else -> throw IllegalArgumentException("Item has wrong type")
}
kotlin generics inheritance
1个回答
0
投票

这个函数实际上是有效的(发布完整的函数以防其他人需要它),只是我检查了一个项目是否继承自错误的祖先,duh

fun <T>RecyclerActions.scrollToFirstItemFromTop(item: T, shouldExist: Boolean = true) {
        run breaking@{
            repeat(3) {
                ScreenScrollerHelper.scrollForward(100)
                val isElementFound =
                    when (item) {
                        is KRecyclerView -> item.assertWithCondition { isVisibleAndEnabled() }
                        is KView -> item.assertWithCondition { isVisibleAndEnabled() }
                        is KDSLView<*> -> item.assertWithCondition { isVisibleAndEnabled() }
                        else -> throw IllegalArgumentException("Item has wrong type")
                    }
                if (isElementFound || !shouldExist) {
                    return@breaking
                }
            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.