背景:
我正在开发一个小型代码生成器。我想避免在实际生成代码之前就没有代码提示的常见问题。 为了解决这个问题,我创建了一个我打算生成的通用伪类方法。
constructor(private locationStrategy: LocationStrategy, ...) {
console.log(this.locationStrategy.getBaseHref());
...
}
这将在提示中提供提示。在实际的特定方法生成之后
inline fun <R: Any> Any.into(block: MorphBuilder<R>.() -> Unit): MorphBuilder<R> {
throw IllegalStateException("Didn't generate extension method")
}
应该使用它们。
问题:
不幸的是,这会导致以下错误。
class FooMorphBuilder(
var a: String?,
var b: Double?,
var c: Int?,
var d: Float?,
var e: List<String>?
) : MorphBuilder<Foo> {
override fun morph(): Foo = Foo(a!!, b!!, c!!, d!!, e!!)
}
inline fun <Foo> Boo.into(block: FooMorphBuilder.() -> Unit): FooMorphBuilder =
FooMorphBuilder(this.a, this.b, this.c, this.d, this.e)
我希望编译器会选择最具体的实现,但事实并非如此。
是否可以消除这些签名之间的歧义?