假设我们有
class Item {}
Item
和Class<Item>
之间有什么区别?
实际上,Class<Item>
意味着什么以及它应该如何使用?
答案 0 :(得分:2)
您在Haxe manual中有一些解释。
Item
是您发布的代码块中类的实例的类型。 Class<Item>
是类本身的类型。这有点令人困惑,但它也是Java等其他OO语言中的常见概念。
Class<Item>
的实用程序是在运行时中查询类中的方法或字段。这通常称为reflection,在许多特定情况下都很有用,例如metaprogramming,dependency injection或ORM等。还有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