interface 嵌套 interface 遇到的问题

interface 嵌套 interface 遇到的问题,第1张

标题表述可能不准确,直接上代码
比如

type I interface {
	Double() I
}

type T int

func (t T) Double() T {
	return t*2
}

没有办法满足这个条件

想请教一下各位,如果想实现这类操作,该如何处理,谢谢

----------------------- 以下是精选回复-----------------------

答:64 views, 0 replies interface 嵌套 interface 遇到的问题,第2张
答:func (t T) Double() I {
return T(t*2)
}
答:两个函数类型都不一样当然匹配不了
两种办法,一种是接收器改成指针*T 直接修改,去掉返回值。
如果你非要传值的话,可以包装一层空的 interface{},使用时再释放出来,如下:

type IT interface{
Foo() interface{}
}

type CT int

func (c CT)Foo() interface{} {
return interface{}(c*2)
}

func main(){
var v IT = CT(2)
v = v.Foo().(IT)
}



楼上那种做法比较 expedient,如果要满足多个 interface 就不行了。
答:接口方法的签名必须一致,不支持协变 /逆变。
答:package main

import "fmt"

type People interface {
Get() People
}

type Teacher struct {

}

func (Teacher) Get() People {
return Teacher{}
}

func main() {

t := Teacher{}
fmt.Println(t.Get())

}
答:指纹需要完全一致,你返回需要返回 I

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » interface 嵌套 interface 遇到的问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情