Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich Generika mit benutzerdefinierten Typen?

Wie verwende ich Generika mit benutzerdefinierten Typen?

王林
王林nach vorne
2024-02-09 15:50:091134Durchsuche

Wie verwende ich Generika mit benutzerdefinierten Typen?

Der PHP-Editor Baicao führt Sie in die gemeinsame Verwendung von Generika und benutzerdefinierten Typen ein. Generics sind eine in der Programmierung häufig verwendete Technik, um Code flexibler und wiederverwendbar zu machen. Benutzerdefinierte Typen sind Datentypen, die von Entwicklern selbst basierend auf Geschäftsanforderungen definiert werden. Wenn wir in einem benutzerdefinierten Typ Generika verwenden müssen, können wir dies über generische Klassen oder generische Schnittstellen tun. Durch den rationalen Einsatz von Generika und benutzerdefinierten Typen können wir die Wartbarkeit und Skalierbarkeit des Codes besser verbessern. In den folgenden Artikeln werden wir die spezifischen Methoden und Überlegungen zur Verwendung von Generika mit benutzerdefinierten Typen detailliert beschreiben.

Frageninhalt

Ich bin wirklich verwirrt darüber, wie die Regeln für Generika funktionieren. Ich möchte lediglich, dass eine Funktion mehrere benutzerdefinierte Typen akzeptiert und für jeden Typ eine andere Logik hat.

type myObjOne struct {
    myfield        string
}

type myObjTwo struct {
    myObjTwo
    myOtherField   string
}

type Generic interface {
    myObjOne | myObjTwo
}

func derp[T Generic](c T) {
    switch any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}

Warum löst c.myfield den CompilerMissingFieldOrMethod aus? c.myfield 抛出 c.myfield 未定义(类型 T 没有字段或方法 myfield)compilerMissingFieldOrMethod

解决方法

c 是类型 T

Lösung

ccc ist vom Typ T und nicht das Ergebnis einer Typzusicherung. Behoben durch Zuweisen des Ergebnisses der Typzusicherung zu einer Variablen.

func derp[T Generic](c T) {
    switch c := any(c).(type) {
    case myObjOne:
        // I can't access the fields of my types like this
        c.myfield = "sdfsfsdfdsf"
    case myObjTwo:
        c.myOtherField = "sdfsfsdfdsf"
    }
    return
}
🎜Dieser Code deklariert eine zweite Variable in einem Typschalter 🎜, deren Typ vom Zweig des Schalters abhängt. 🎜

Das obige ist der detaillierte Inhalt vonWie verwende ich Generika mit benutzerdefinierten Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen