我在不同版本的实现之上创建层时遇到的问题。目标是抽象出实现细节,调用者不需要关心我们使用的是哪个实现。请在此处查看代码示例^ 该代码可以更好地解释我遇到的问题。我们有两个版本的 Stream 实现Stream1和Stream2. 它们有一个共同的界面Stream。两者都有对应的BindStreamHandler函数接受StreamHandler1or StreamHandler2。我们有一个函数BindStreamHandler和一个通用的实现func StreamHandlerImpl(s Stream)。无论我们使用Stream1or Stream2,一般实现是相同的。现在我面临一个问题 downcasting StreamHandlerImpl(accepting abstract Streamto StreamHandler1(accepting Stream1))。
1 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
看起来你正在尝试使用类层次结构(如 Java)来设计你的类,这实际上不是 Go 处理 OO 的方式。我真的建议您围绕接口设计代码,而不是试图模仿继承。由于我们无法推测您为什么有这样的类型,下面是一个最小的代码片段,它将使BindHandler签名保持更严格。
func BindHandler(h StreamHandler) {
if Version == 1 {
BindStreamHandler1(func(s Stream1) {
h(s)
})
} else {
BindStreamHandler2(func(s Stream2) {
h(s)
})
}
}
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消