Go:reflect
在Java中编写抽象代码,使用类型本身的信息创建实例。
private <T> T createInstance (Class<T> clazz) {
T obj = null;
try {
obj = (T)(Class.forName(clazz.getName()));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return obj;
}
Go中的reflect package
首先使用createInstance
,创建一个将成为实例化过程主体的函数。代码如下所示:
func createInstance(typ reflect.Type) interface{} {
val := reflect.New(typ).Elem()
return val.Interface()
}
该函数的参数是 reflect.Type
类型。 即使它是一个类型,如果它是一个interface{}
类型,任何东西都会放在参数中,所以reflect.Type
类型是绑定的。
使用createInstance()
创建的函数的调用的处理如下 :
var u User
obj := createInstance(reflect.TypeOf(u))
r := obj.(User)
可以reflect.TypeOf()
通过将声明的变量作为参数reflect.Type
来获得类型的对象。将此createInstance()
传递给函数。
发表评论
要发表评论,您必须先登录。