| by suyi | No comments

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()传递给函数。

发表评论