Нека обобщя това, което се опитвам да постигна. По принцип искам начин да имам набор от интерфейси, които да сървърират api, които външните добавки използват за взаимодействие с двигателя.
Ето как в момента настройвам нещата.
class Engine : ApiEngine {
override fun start() {
println("Starting Engine")
}
override fun stop() {
println("Stopping Engine.")
}
}
interface ApiEngine {
fun start()
fun stop()
}
Това е тромаво и съм виждал някои други решения, използващи ASM и динамично инжектиране на интерфейса в класа "Engine". Виждал съм нещо подобно в друг източник, но никога не можах да разбера напълно как да го направя.
@Implements("ApiEngine")
class Engine {
@Export("start")
fun start() {
println("Starting Engine")
}
@Export("stop")
fun stop() {
println("Stopping Engine.")
}
}
interface ApiEngine {
@Import("start")
fun start()
@Import("stop")
fun stop()
}
Въпросът ми е в ByteBuddy възможно ли е ефективно да накарам Engine
да внедри ApiEngine
, така че екземпляр на Engine() да може да бъде прехвърлен към ApiEngine за използване на API?