Wie gehe ich mit einer Schnittstelleninkongruenz um, wenn Schnittstellenmethoden mit konkreten Typen implementiert werden?

Linda Hamilton
Freigeben: 2024-10-27 04:20:02
Original
401 Leute haben es durchsucht

 How to Handle an Interface Mismatch When Implementing Interface Methods with Concrete Types?

Go-Schnittstellenmethode, die die Schnittstelle zurückgibt, stimmt nicht mit der Methode überein, die den konkreten Typ zurückgibt

Problem:

Eine Schnittstellenmethode, die eine Schnittstelle zurückgibt, funktioniert nur, wenn der implementierende Typ die Schnittstelle selbst deklariert, nicht einen konkreten Typ, der die Schnittstelle implementiert.

Frage:

Wie können wir Dieses Problem lösen und gleichzeitig Änderungen an konkreten Typen von Drittanbietern oder direkte Schnittstellen zu diesen vermeiden?

Antwort:

Um die Schnittstelleninkongruenz auszugleichen, verwenden wir Kapselungstechniken:

1. Wrapper-Technik:

Erstellen Sie einen neuen Typ, der den konkreten Typ eines Drittanbieters umschließt und die gewünschte Schnittstelle bereitstellt:

<code class="go">type MyBar Bar

func (b *MyBar) GetStringer() fmt.Stringer {
    return &Foo{"foo"}
}</code>
Nach dem Login kopieren

Dieser Ansatz ermöglicht die Anpassung an die gewünschte Schnittstelle, ohne die zu beeinträchtigen Originalbetontyp.

2. Eingebettete Typtechnik:

Einbetten des Drittanbieter-Betontyps in einen neuen Typ und Bereitstellung der erforderlichen Schnittstellenimplementierung:

<code class="go">type MyBar struct{ Bar }

func (b *MyBar) GetStringer() fmt.Stringer {
    return b.Bar.GetStringer()
}</code>
Nach dem Login kopieren

Beim Einbetten bleibt die Funktionalität des ursprünglichen Betontyps erhalten Erweitern mit der gewünschten Schnittstelle.

Diese Techniken ermöglichen die Erstellung benutzerdefinierter Typen, die bestimmten Schnittstellen entsprechen, auch wenn dies bei den ursprünglichen konkreten Typen nicht der Fall ist. Sie bieten einen flexiblen Ansatz zur Integration von Drittanbietertypen in umfassendere schnittstellenbasierte Systeme.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit einer Schnittstelleninkongruenz um, wenn Schnittstellenmethoden mit konkreten Typen implementiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!