linux - Vala:将字符串作为类传递

标签 linux class ubuntu gtk vala

场景: 我有 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/

相关文章:

c++ - 将抽象类实现为本地类?优点和缺点

java - Ubuntu 伴侣 : Android Studio - Gradle project sync failed

java - 如何在 ubuntu 上安装和运行 eclipse

linux - 如何杀死僵尸进程

linux - QEMU msi 仿真

python - 为什么我不能为 python 使用已安装的模块?

r - 我应该使用什么版本的 R 在 ubuntu 15.04 中升级 R

c - 在 OpenCL 的内核中设置参数会导致错误

java - 在 JAVA 中创建动态类而不使用反射 API?

Swift:变量的值是公共(public)的但仍然是本地的?