Class 获取Haxe中具有空值的类字段的类型

Class 获取Haxe中具有空值的类字段的类型,class,types,metaprogramming,haxe,neko,Class,Types,Metaprogramming,Haxe,Neko,是否可以在haxe中获取具有null值的字段类 函数“Type.getClass”获取值的类(在运行时设置),但我需要在编译时定义类 函数“getClassFields”只返回字段名,不返回类 例如: class MyCls { public static var i:Int = null; public static var s:String = null; } trace(Type.getClass(MyCls.i)); // show "null", but I need t

是否可以在haxe中获取具有null值的字段类

函数“Type.getClass”获取值的类(在运行时设置),但我需要在编译时定义类

函数“getClassFields”只返回字段名,不返回类

例如:

class MyCls
{
   public static var i:Int = null;
   public static var s:String = null;
}

trace(Type.getClass(MyCls.i)); // show "null", but I need to get Int
trace(Type.getClass(MyCls.s)); // show "null", but I need to get String
在我的情况下,我无法改变MyCl类的来源


谢谢。

您可以尝试
运行时类型信息
。它是一个Haxe特性,允许在运行时获取类型的完整描述。

由于您需要获取空字段的类型,因此确实需要求助于Haxe的运行时类型信息(RTTI)(如@ReallylUniqueName推荐的)

现在,很明显,有一个陷阱

RTTI需要
@:RTTI
元数据,但您说过不能更改
MyCls
类来添加它。然后,解决方案是通过构建文件中的宏添加它。例如,如果您使用的是
.hxml
文件,那么它应该如下所示:

--interp
--macro addMetadata("@:rtti", "MyCls")
-main Test
Test.hx:11: i,CAbstract(Int,{ length => 0 }),Int
Test.hx:11: s,CClass(String,{ length => 0 }),String
使用此定义和您自己的
MyCls
定义,输出如下所示:

--interp
--macro addMetadata("@:rtti", "MyCls")
-main Test
Test.hx:11: i,CAbstract(Int,{ length => 0 }),Int
Test.hx:11: s,CClass(String,{ length => 0 }),String