场景: 我有 x 个类(class)。让我们说 10;每个类都有不同的 UI 功能。当用户加载文件时,该扩展名会告诉程序要加载的类名;但它是以字符串的形式。
有没有办法将一个字符串作为类名传递出去?影响的东西。
var classname = "Booger";
var nose = new classname(){ //classname really means "Booger"
//Do Operation
}
最佳答案
您可以使用 var t = Type.from_name(classname);
按名称反射(reflect)类型,但是,这适用于所有 类型,包括枚举和结构可能是 Type.INVALID
类型。您可能应该做一些检查,例如 t.is_a(typeof(MyParentClass))
。
然后您可以使用 var obj = Object.new(t);
实例化一个副本。整个事情看起来像:
var classname = "Booger";
var t = Type.from_name(classname);
if (t.is_a(typeof(MyParentClass)))
return Object.new(t);
else
return null;
还值得注意的是,运行时类型名称前面有命名空间,因此您可能想要执行 "MyNs"+ classname
。您可以 checkin 生成的 C 或执行 typeof(MyClass).name()
。
关于linux - Vala:将字符串作为类传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216410/