传递 Fantom 类型文字
Passing a Fantom type literal
我正在尝试将 Fantom 中的对象动态转换为在 运行 时选择的所需类型。
Type type := Int#
Obj n := 1 as Obj
echo((n as type).toStr)
这是一个简化的例子。我想将类型传递给 class 并在 运行.
时初始化它
一个简单的答案是只使用 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) )
我正在尝试将 Fantom 中的对象动态转换为在 运行 时选择的所需类型。
Type type := Int#
Obj n := 1 as Obj
echo((n as type).toStr)
这是一个简化的例子。我想将类型传递给 class 并在 运行.
时初始化它一个简单的答案是只使用 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) )