L'éditeur PHP Youzi est là pour vous présenter comment utiliser l'énumération de chaînes avec des méthodes comme paramètres génériques. En programmation, nous devons souvent utiliser des génériques pour augmenter la flexibilité et la réutilisabilité du code. L'utilisation d'énumérations de chaînes avec des méthodes comme paramètres génériques peut rendre notre code plus concis et efficace. Ensuite, nous expliquerons comment implémenter cette fonction et donnerons un exemple de code spécifique. Explorons ensemble cette technique de programmation intéressante !
J'ai plusieurs énumérations dérivées de chaînes qui partagent un validate()
方法(全部超出我的控制范围)。我想要一个通用方法,将字符串转换为这些枚举,并在生成的枚举上调用 validate()
commun. J'ai essayé d'utiliser des génériques pour y parvenir, mais j'ai échoué pour diverses raisons.
Dans l'exemple ci-dessous, la contrainte de type est trop forte et cela m'empêche d'appeler la méthode validate()
。我还尝试使用 validate()
pour insérer ma propre interface et l'utiliser comme contrainte de type, mais échoue ensuite sur la partie conversion de type.
Comment puis-je y parvenir sans modifier l'énumération ?
package main // imagine i have multiple of those types outside of my control type FooStatusEnum string func NewFooStatusEnum(value FooStatusEnum) *FooStatusEnum { return &value } const ( FooStatusEnumA FooStatusEnum = "A" FooStatusEnumB FooStatusEnum = "B" FooStatusEnumC FooStatusEnum = "C" ) func (m FooStatusEnum) Validate() error { return nil } func stringToValidatedEnum[E ~string](s string) E { e := E(s) if err := e.Validate(); err != nil { panic(1) } return e } func main() { stringToValidatedEnum[FooStatusEnum]("A") e := FooStatusEnum("A") e.Validate() }
Utilisez des contraintes de type spécifiant la méthode string
基础类型和 validate()
:
type enumstring interface { ~string validate() error } func stringtovalidatedenum[e enumstring](s string) e { e := e(s) if err := e.validate(); err != nil { panic(1) } return e }
Testez-le :
result := stringtovalidatedenum[foostatusenum]("a") fmt.printf("%t %v", result, result)
Cela affichera (essayez-le sur go terrain de jeu) :
main.FooStatusEnum A
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!