如何实例化 Golang 泛型类型 从反射类型播种它

How to Instantiate Golang Generic Type Seeding it From Reflect Type

提问人:404 提问时间:7/23/2023 最后编辑:404 更新时间:7/27/2023 访问量:105

问:

具有通用界面

type G[T any] interface {
...
}

和 ,如何实例化另一个实际上表示reflect.Typetreflect.TypeG[t]

最终,它应该与它自己相匹配tG[t]

func ImplementsG(t reflect.Type) bool {
    var gType reflect.Type = ... // get Type of exact interface G[of exact t]

    return t.Implements(gType)
}
Go 泛型 反思

评论

1赞 erik258 7/23/2023
您能解释一下您的用例吗?Go 是静态编译的,因此您不需要动态确定类型是否实现接口。
0赞 Jauhar Arifin 7/24/2023
我不认为你能在 Go 中做到这一点。没有具体类型就无法创建对象,并且 interface 不是具体类型。CMIIW,您正在尝试构建类似 Java 代理的东西,对吧?(docs.oracle.com/javase/8/docs/technotes/guides/reflection/...)
0赞 404 7/27/2023
@JauharArifin instantiate(G, t) 不打算创建一个对象,而是要从泛型接口中获取确切的特定类型,以便它是G[T any]exact G[exact t]
0赞 404 7/27/2023
@erik258。用例是一般的。它应该创建一个相同类型的实例(使用常规的 New),然后再检查类型是否可以自行克隆它(实现接口)。Cloneable 应该克隆它自己,而不仅仅是抽象的。func Clone[T any](value T) TCloneable[T]func(t T) Clone() Tinterface{}

答: 暂无答案