Junior
Kaip įgyvendinamos sąsajos Kotlin kalboje?
sobes.tech AI
Atsakymas iš AI
Sąsajos Kotlin įgyvendinamos naudojant raktinį žodį implements (neaišku Kotlin, tiesiog nurodoma per dvitaškį) arba by delegavimui.
Pagrindiniai įgyvendinimo būdai:
- Tiesioginė įgyvendinimas: Objektas arba klasė tiesiogiai įgyvendina visas sąsajos narius.
Paveldėjimas iš klasės ir sąsajų įgyvendinimas vienu metu, klasė nurodoma pirmiausia.interface MyInterface { fun doSomething() val myProperty: String } class MyClass : MyInterface { override fun doSomething() { println("Doing something in MyClass") } override val myProperty: String = "Hello" }open class BaseClass class AnotherClass : BaseClass(), MyInterface { override fun doSomething() { println("Doing something in AnotherClass") } override val myProperty: String = "World" } - Įgyvendinimo delegavimas: Sąsajos įgyvendinimas deleguojamas kitam objektui. Naudojamas žodis
by. Tai naudinga kompozicijai ir daugiavaikio paveldėjimo problemų išvengimui.Šiuo atvejuinterface DelegatedInterface { fun performAction() } class DelegatedObject : DelegatedInterface { override fun performAction() { println("Action performed by DelegatedObject") } } class ImplementingClass(di: DelegatedInterface) : DelegatedInterface by di { // ImplementingClass deleguoja performAction() metodo įgyvendinimą objektui di }ImplementingClassnesireiškiaperformActionsavarankiškai, o iškvietimasperformingClass.performAction()nukreipiamas įdi.performAction().
Kai įgyvendinate kelis interfeisus su vienodais nariais, būtina išspręsti konfliktus, aiškiai perrašant narį ir nurodant, iš kurio interfeiso gaunama įgyvendinimas, naudojant <Interfeisas>.<narys> sintaksę.
interface InterfaceA {
fun foo() { println("InterfaceA") }
fun bar()
}
interface InterfaceB {
fun foo() { println("InterfaceB") }
fun bar() { println("InterfaceB bar") }
}
class ResolvingConflict : InterfaceA, InterfaceB {
override fun foo() {
super<InterfaceA>.foo() // Iškviečiame `foo` įgyvendinimą iš InterfaceA
super<InterfaceB>.foo() // Iškviečiame `foo` įgyvendinimą iš InterfaceB
}
override fun bar() {
super<InterfaceB>.bar() // Naudojame `bar` įgyvendinimą iš InterfaceB
}
}