Maison  >  Article  >  développement back-end  >  Comment utiliser des génériques avec des types personnalisés ?

Comment utiliser des génériques avec des types personnalisés ?

王林
王林avant
2024-02-09 15:50:091131parcourir

Comment utiliser des génériques avec des types personnalisés ?

l'éditeur php Baicao vous présente comment utiliser ensemble les génériques et les types personnalisés. Les génériques sont une technique couramment utilisée en programmation pour rendre le code plus flexible et réutilisable. Les types personnalisés sont des types de données définis par les développeurs eux-mêmes en fonction des besoins de l'entreprise. Lorsque nous devons utiliser des génériques dans un type personnalisé, nous pouvons le faire via des classes génériques ou des interfaces génériques. En utilisant rationnellement les génériques et les types personnalisés, nous pouvons mieux améliorer la maintenabilité et l'évolutivité du code. Dans les articles suivants, nous détaillerons les méthodes et considérations spécifiques à l’utilisation de génériques avec des types personnalisés.

Contenu de la question

Je suis vraiment confus quant au fonctionnement des règles des génériques. Je veux juste qu'une fonction accepte plusieurs types personnalisés et ait une logique différente pour chaque type.

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
}

Pourquoi c.myfield lance-t-il le compilateur c.myfield non défini (le type T n'a pas de champ ni de méthode myfield)MissingFieldOrMethod ? c.myfield 抛出 c.myfield 未定义(类型 T 没有字段或方法 myfield)compilerMissingFieldOrMethod

解决方法

c 是类型 T

Solution

ccc est de type T, pas le résultat d'une assertion de type. Corrigé en attribuant le résultat de l'assertion de type à une variable.

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
}
🎜Ce code déclare une deuxième variable dans un type switch 🎜 dont le type dépend de la branche du switch. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer