首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自身类型的接口方法返回值

自身类型的接口方法返回值
EN

Stack Overflow用户
提问于 2017-03-06 07:15:52
回答 1查看 1.2K关注 0票数 0

我正在尝试制作一种方法,它将接受某种类型的结构并对其进行操作。但是,我需要一个可以在结构实例上调用的方法,它将返回该结构类型的对象。我得到了一个编译时错误,因为实现接口的类型的返回类型与接口的方法返回类型不同,但这是因为接口需要返回自己类型的值。

接口声明:

代码语言:javascript
复制
type GraphNode interface {
    Children() []GraphNode
    IsGoal() bool
    GetParent() GraphNode
    SetParent(GraphNode) GraphNode
    GetDepth() float64
    Key() interface{}
}

实现该接口的类型:

代码语言:javascript
复制
type Node struct {
    contents []int
    parent   *Node
    lock     *sync.Mutex
}

func (rootNode *Node) Children() []*Node {
...
}

错误消息:

代码语言:javascript
复制
.\astar_test.go:11: cannot use testNode (type *permutation.Node) as type GraphNode in argument to testGraph.GetGoal:
*permutation.Node does not implement GraphNode (wrong type for Children method)
have Children() []*permutation.Node
want Children() []GraphNode

获取父对象的方法:

代码语言:javascript
复制
func (node *Node) GetParent() *Node {
    return node.parent
}

上面的方法失败了,因为它返回一个指向节点的指针,而接口返回类型GraphNode。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-06 09:21:34

*Node不实现GraphNode接口,因为Children()的返回类型与接口中定义的类型不同。即使*Node实现了GraphNode,您也不能在需要[]GraphNode的地方使用[]*Node。需要声明Children()才能返回[]GraphNode[]GraphNode类型的切片的元素可以是*Node类型。

对于GetParent(),只需将其更改为:

代码语言:javascript
复制
func (node *Node) GetParent() GraphNode {
    return node.parent
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42615210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档