PDA

Просмотр полной версии : Создание экземпляра класса по строке с именем


Aloran
15.06.2012, 17:48
Есть набор классов, которые расширяют один интерфейс. Есть метод который создает экземпляр одного из классов, в зависимости от строки содержащей имя. Как это реализовать?


public function createItem(name:String):IItem // name = "Label" gui.items.Label.as
{
return new (name as Class)(); //естественно не пашет
}


возможно ли?

Hauts
15.06.2012, 17:56
getDefinitionByName мб?


public function createItem(name:String):IItem
{
return new (getDefinitionByName( name ) as Class)();
}

Aloran
15.06.2012, 19:59
Блин. Точно. Что то я заработался))) Спасибо!

warez_men
01.08.2012, 14:53
А пользовательский классами не получается :(

var LavelName:String = "Level" + _levelNumber;
//"src.Levels::Level
var linkClassName:Class = getDefinitionByName(LavelName) as Class;
ругается
[Fault] exception, information=ReferenceError: Error #1065: Переменная Level1 не определена.

Если выше напишу trace("getQualifiedClassName="+getQualifiedClassName(Level1))

То работает но при таком раскладе пользы от этой функций очень мало помогите решить эту проблему.

GBee
01.08.2012, 15:20
То работает но при таком раскладе пользы от этой функций очень мало помогите решить эту проблему

var tmp1:Level1;
var tmp2:Level2;
var tmp3:Level3;

warez_men
01.08.2012, 15:23
GBee,Думул об этом но у меня около 100 уровней и каждый так прописывать не красиво...

zuxul
01.08.2012, 15:29
Level1 вкомпиливается в конечную флешку?

warez_men
01.08.2012, 15:37
это просто класс с параметрами. Или я что то не так понял в вашем вопросе?

GBee
01.08.2012, 15:47
Уровни можно было вынести во вне хмл, жсон, или захардкордить массивы?

zuxul
01.08.2012, 15:52
Если этот класс нигде не используется, то компилятор не встраивает его в конечную флешку и из-за этого getDefinitionByName его и не находит.
Можно просто завести массив или... Я делаю так:
private static var __class:Object = {
"Label": gui.items.Label,
"Level1": Level1
}
public function createItem(name:String):IItem {
return new __class[name]();
}

warez_men
01.08.2012, 16:04
Понятно спасибо!