是否可以通过类型转换来满足Kotlin中的多种类型约束?
假设我遇到以下情况,但想避免将类型强制转换为类C
(以防多个类实现A
和B
,或者我不知道type C
):
interface A
interface B
class C: A, B
fun <T> foo(bar: T) where T: A, T: B {
}
Run Code Online (Sandbox Code Playgroud)
是否有可能强制转换A
和B
同步?聪明的演员似乎不允许这样做。我可以手动投射吗?
val c = C()
foo(c) // works
val d: Any = c
if (d is A && d is B) {
foo(d) // smart cast doesn't work here, compiler error
}
// Something like this maybe?
foo(d as A && B)
Run Code Online (Sandbox Code Playgroud)
我知道可以通过创建一个同时继承自A
和的新接口,B
然后使用该接口来实现,但是如果我不控制所讨论的类,则可能无法实现。
谢谢
该类型必须显式实现所需的接口,并且由于Any
不能同时是B
and A
(即使它实现了两者),因此必须有第三种类型,例如C
.
这个类似的问题有一个通用的解决方法;Kotlin 中可以进行交叉转换吗?
T
因此,实现A
和的任意类型B
都可以被识别,但is
不能as
直接组合&&
,这使得如果没有某种显式实现包装器就无法满足函数类型约束。
归档时间: |
|
查看次数: |
69 次 |
最近记录: |