这两个功能相互冲突。 这个问题有解决方法吗?
inline fun <reified T: Any> foo() = ...
inline fun <reified T: Any, reified I: Any> foo() = ...
谢谢!
编辑:
我发现这个问题很方便(至少对我而言):
inline fun <reified T: Any> foo() = foo<T, MyDefaultType>()
inline fun <reified T: Any, reified I: Any> foo(type1: KClass<T> = T::class, type2: KClass<I> = I::class) = ...
如果您选择只添加一个参数,它甚至可以简洁。
稍后您可以像这样使用它:
val x = foo<A, B>()
val y = foo<C>()
这就是我需要的。
答案 0 :(得分:5)
从编译器的角度来看,这些函数具有相同的签名。类型参数不是函数签名的一部分;它可以由编译器自动推断,因此不用于消除对不同重载的调用的歧义。
您需要为这些功能指定不同的名称。
答案 1 :(得分:0)
将注释@JvmName("foo2")
添加到其中一个函数中。