如何从字符串名称创建实例?

时间:2013-12-04 23:51:19

标签: reflection types instantiation haxe

this question类似,但我正在寻找Haxe 3.0解决方案。我希望基于一个字符串(来自我的数据文件)实例化一个类。

据我所知,这是正确的。但是,我收到运行时错误

[Fault] exception, information=No such constructor npc.NPC_Squid
Fault, createEnum() at Type.hx:166

Haxe 3代码:

var e = haxe.macro.Expr.ExprDef;            
var instance :Dynamic = e.createByName( "npc." +  data.character, [] );
    //....

我的班级:

package npc;

import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import openfl.Assets;

class NPC_Squid extends Sprite
{   
    public function new()
    {
        super();
        addEventListener( Event.ADDED_TO_STAGE, onAdded);
        addEventListener( Event.REMOVED_FROM_STAGE, onRemoved);

    }
//....

我的包裹似乎是正确的。关于它为什么找不到构造函数的任何想法?

2 个答案:

答案 0 :(得分:1)

我想你需要这个:

 var myInstance = Type.createInstance(Type.resolveClass("mypackage.MyClass"));

请注意,如果您使用dead-code elimination,则应在某处导入/引用MyClass。 我主要在我的Main类中为这样的事情创建一个函数 forceCompile

 public static function main() 
 {
    forceCompile();

    // Wind up all your stuff
 }

 public static function forceCompile()
 {
      MyClass;
 }

答案 1 :(得分:1)

在我的Haxe 3项目中,我使用:

var easing: IEasing = Type.createEmptyInstance(Type.resolveClass("motion.easing." + easingType + easingStyle));

它完美无缺。一个重要的精度:您需要导入可以这种方式创建的所有类。我确保导入了所有的motion.easing包。

您可以看到完整示例here