gpt4 book ai didi

generics - 如何使类型推断适用于遵循嵌套通用接口(interface)的实例?

转载 作者:行者123 更新时间:2023-12-02 12:51:02 25 4
gpt4 key购买 nike

这个最小的例子

interface Foo<T> {
fun foobinate(value: T)
}

interface Bar<T>

class AFoo<T> : Foo<T> {
override fun foobinate(value: T) {}
}

class ABar<T> : Bar<T>

fun <T> doSomething(foo: Foo<Bar<T>>, x: Bar<T>) {
foo.foobinate(x)
}

fun main() {
val foo = AFoo<ABar<Int>>()
doSomething(foo, ABar<Int>())
}

给出 doSomething 的错误线:
Type mismatch: inferred type is AFoo<ABar<Int>> but Foo<Bar<Int>> was expected

有什么方法可以让它发挥作用,还是有一些概念性的东西阻碍了它?

最佳答案

声明 doSomething像这样应该可以

fun <A : Bar<*>> doSomething(foo: Foo<A>, x: A) {
foo.foobinate(x)
}

这样,您可以确保 x 属于 Foo 的特定类型。接受,因为 Foo 和 Bar 都具有不变的类型参数。

这在这里不起作用,因为 Bar<T> 的子类变成 TFoo<T>获取和 Bar<T> 的子类其中 x是一个实例可以是2种不同的类型。
fun <T, A : Bar<T>> doSomething(foo: Foo<Bar<T>>, x: Bar<T>) {
foo.foobinate(x)
}

关于generics - 如何使类型推断适用于遵循嵌套通用接口(interface)的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61813289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com