Item和Class <item> </item>之间有什么区别

时间:2014-08-06 11:45:35

标签: haxe

假设我们有

class Item {}

ItemClass<Item>之间有什么区别?

实际上,Class<Item>意味着什么以及它应该如何使用?

2 个答案:

答案 0 :(得分:2)

您在Haxe manual中有一些解释。

Item是您发布的代码块中类的实例的类型。 Class<Item>是类本身的类型。这有点令人困惑,但它也是Java等其他OO语言中的常见概念。

Class<Item>的实用程序是在运行时中查询类中的方法或字段。这通常称为reflection,在许多特定情况下都很有用,例如metaprogrammingdependency injectionORM等。还有page in the Haxe manual致力于反思。

答案 1 :(得分:0)

经过一段时间的演奏后,我来到这个例子来理解。

class Main {
    static function main() 
    {
        var item = createItem(Item);
        var item2 = createItem(Item2);
        var dupItem = duplicateItem(item);        
        var dupItem2 = duplicateItem(item2);
    }

    static function duplicateItem(item:Item):Item
    {
        trace('Duplicate ' + item);

        var itemType = Type.getClass(item);        
        var item:Item = Type.createInstance(itemType,[]);         
        return item;
    }

    static function createItem(itemType:Class<Item>):Item
    {
        trace('Create ' + itemType);
        var item:Item = Type.createInstance(itemType,[]);  

        return item;
    }
}

class Item
{
    public function new ()
    {
        trace("Item 1");
    }
}

class Item2 extends Item
{
    public function new ()
    {
        super();

        trace("Item 2");
    }
}

输出:

Main.hx:23: Create [class Item]
Main.hx:34: Item 1
Main.hx:23: Create [class Item2]
Main.hx:34: Item 1
Main.hx:44: Item 2
Main.hx:14: Duplicate [object Item]
Main.hx:34: Item 1
Main.hx:14: Duplicate [object Item2]
Main.hx:34: Item 1
Main.hx:44: Item 2