为什么注释类不能推断类型参数?

时间:2018-09-06 13:10:27

标签: kotlin type-inference

让我们考虑以下代码:

@Target(AnnotationTarget.FIELD)
annotation class DeserializeInterface<T: Any>(val targetClass: KClass<T>)

interface A
class B : A

class Test {
    @DeserializeInterface<B>(B::class) val a: A = B()
}

line X,我写@DeserializeInterface<B>(B::class),而Kotlin不允许我只写@DeserializeInterface(B::class)

在这种情况下为什么不从B::class推断类型参数?

相反,这里的类型推断工作正常:

class AClass<T: Any>(val a: List<T>)

fun main(args: Array<String>) {
    val a = AClass(listOf(1,2,3))
}

但是为什么?

1 个答案:

答案 0 :(得分:3)

这是当前类型推断算法的局限性。我已提出issue,您可以关注。