传递Fantom类型的文字

时间:2016-07-15 05:42:05

标签: types casting fantom

我正在尝试动态地将Fantom中的对象转换为在运行时选择的所需类型。

Type type := Int#
Obj n := 1 as Obj
echo((n as type).toStr)

这是一个简化的例子。我想将类型传递给一个类,并在运行时进行初始化。

1 个答案:

答案 0 :(得分:3)

一个简单的答案就是使用dynamic invoke,即使用->代替.。如果您知道该方法存在,那么您甚至不需要知道类型:

n := (Obj) 1
echo( n->toStr() )

但更一般地说,您可以按照建议动态投射。如果您在编译时不知道type是什么,那么编译器应该如何知道!?

通常n会实现在父超类型上定义的方法,然后将n强制转换为超类型并正常调用该方法:

myObj := ...
n := (Supertype) myObj
n.myMethod()

但是如果没有共同的父类型,那么动态调用就是最佳选择。

...或使用反射!在Fantom

中轻而易举
n := (Obj) 1
method := n.typeof.method("toStr")
echo( method.callOn(n, null) )