如何使用带有方法的字符串枚举作为泛型参数?
Feb 10, 2024 pm 02:21 PMphp小编柚子在这里为大家介绍如何使用带有方法的字符串枚举作为泛型参数。在编程中,我们经常需要使用泛型来增加代码的灵活性和可重用性。而使用带有方法的字符串枚举作为泛型参数,可以使我们的代码更加简洁和高效。接下来,我们将详细阐述如何实现这一功能,并给出具体的示例代码。让我们一起来探索这个有趣的编程技巧吧!
问题内容
我有多个字符串派生的枚举,它们共享一个通用的 validate()
方法(全部超出我的控制范围)。我想要一个通用方法,将字符串转换为这些枚举,并在生成的枚举上调用 validate()
。我尝试使用泛型来实现这一目标,但由于各种原因失败了。
在下面的示例中,类型约束太强,导致无法调用 validate()
。我还尝试使用 validate()
方法插入我自己的接口并将其用作类型约束,但随后在类型转换部分失败。
如何在不修改枚举的情况下实现此目的?
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() }
登录后复制
解决方法
使用指定 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 }
登录后复制
测试它:
result := stringtovalidatedenum[foostatusenum]("a") fmt.printf("%t %v", result, result)
登录后复制
这将输出(在 go playground 上尝试):
main.FooStatusEnum A
登录后复制
以上是如何使用带有方法的字符串枚举作为泛型参数?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)