dimkoss11
11/16/2018, 6:15 PMclass MapBuilder<T,U> {
operator fun invoke(arg: T): MapBuilder<T, U> {
return this
}
operator fun invoke(arg: U): MapBuilder<T, U> {
return this
}
}
of course it's don't work due to JVM limitations.
Platform declaration clash: The following declarations have the same JVM signature (invoke(Ljava/lang/Object;)Lcom/test/tests/MapBuilder;):
operator fun invoke(arg: T): MapBuilder<T, U> defined in com.test.tests.MapBuilder
operator fun invoke(arg: U): MapBuilder<T, U> defined in com.test.tests.MapBuilder
Any ideas how can I realize this?Bob Glamm
11/16/2018, 7:10 PMilya.gorbunov
11/16/2018, 8:24 PM@JvmName
annotation to overcome jvm declaration clashilya.gorbunov
11/16/2018, 8:24 PMBob Glamm
11/16/2018, 9:00 PMaarjav
11/16/2018, 9:47 PMclass MapBuilder<K, V> {
val pairs: MutableList<Pair<K, V>> = mutableListOf()
inner class EntryBuilder constructor(val key: K) {
operator fun invoke(value: V): MapBuilder<K, V> {
pairs += key to value
return this@MapBuilder
}
}
operator fun invoke(key: K) = EntryBuilder(key)
}