考虑 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中是否可以使用类似的方法?