Я бы хотел использовать by
для создания API классов.Есть ли способ сделать что-то вроде следующего?
interface Foo<T> {
fun foo(t: T)
}
inline fun <reified T> createFoo() = object : Foo<T> {
override fun foo(t: T) {
// do stuff
}
}
// This is an error
class StringIntFoo : Foo<String> by createFoo(), Foo<Int> by createFoo()
fun main(){
val foo = StringIntFoo()
foo.foo("")
foo.foo(2)
}
// Doing it manually obviously isn't an issue
class ManualStringIntFoo {
fun foo(t: String){
}
fun foo(t: Int){
}
}
Ссылка на детская площадка .
Похоже, сгенерированный метод в конечном итоге имеет ту же сигнатуру JVM,Я надеялся, что обретенные типы обойдут это.Только с одной реализацией он работает просто отлично, и типы выглядят правильно.
Есть ли способ сделать это на самом деле?Является ли StringIntFoo технически Foo, я полагаю, не важно для рассматриваемой проблемы.Было бы здорово иметь возможность создавать классы таким образом.