考虑 Go 语言中的这个例子:


type I interface {

    get() string

}


type S struct {}

func (s *S) get() string {

    return "here!"

}

var sSupplier = func() *S {

    return &S{}

}


func foo(supplier func () I) {

    i := supplier()

    println(i)

}


func main() {

    foo(sSupplier) // compile error, type mismatch

}

类型S继承接口I。但显然 typefunc () *S不继承func () I,所以我不能调用foowithsSupplier来代替supplier函数。有没有办法在不强制sSupplier返回类型的情况下修复它I?


在 java 中,您可以使用泛型来执行类似<T extends I> void foo(Supplier<T> supplier) {...}then 调用类型的foo(sSupplier);操作。Supplier<S> sSupplier我不确定在go中是否可以使用类似的方法?