为什么类泛型在继承下不能自动推导


#1

这是一个泛型函数:

    fun <T : Any> test(kcls: KClass<T>) {

    }

支持这样调用:test(String::class) IDE 并且不会报错。

在类泛型中:

open class A<T : Any>(cls: KClass<T>)

B 继承 A

必须写成:class B : A<String>(String::class)

class B : A(String::class) 这样会提示:one type argument expected for class A<T : Any>

新建A实例 却是可以 : A(String::class)


#2

这种,没啥为什么,就是推导算法没有做这个功能。不用纠结。

可以试试1.4的类型推导有没有支持这个


#3

去官方提issue了,希望尽快支持


#4

你先看看1.4支持不。1.4类型推导厉害了很多


#5

不过,这个类型推导的case说实话,感觉吧不是特别重要,官方现在重心不在这儿


#6

1.4试了下没支持
https://pl.kotl.in/l-oFPEELk


#7
方法应该翻译成了 KClass<Any>,接收的是一个父类型,实际上不需要关注类型。

类声明的顺序应该是由类注册类型 <T> 推导参数类型 KClass<T>
这里问题主要还是不加 <> 破坏了继承规则

但我觉得你可以提一个 issue


京ICP备16022265号-2 Kotlin China 2017 - 2018