![]() |
|
||||||||||
|
|||||
|
[+ 1.0 08.10.14]
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Необходимо получить список констант класса, чтобы написать корректное наследование от Enumiration
Одним из ключевых свойств паттерна Enumiration является обязательное условие создания экземпляров перечисления исключительно через константы. Собственно на данный момент у меня это осуществляется методом Evaluation.created (); Любые попытки вызвать конструктор после этого будут выкидывать ошибки public class UnitType extends UintEnumiration { public static const HERO:UnitType = new UnitType(1); public static const WARRIOR:UnitType = new UnitType(2); public static const MAGE:UnitType = new UnitType(3); public static const ENEMY:UnitType = new UnitType(4); Enumiration.creaded (true); public function UnitType(value:uint) { super (value); } } |
|
|||||
|
Можно получить число и список экземпляров, а не список констант.
public class UnitType extends UintEnumiration { public static const HERO:UnitType = new UnitType(1); public static const WARRIOR:UnitType = new UnitType(2); public static const MAGE:UnitType = new UnitType(3); public static const ENEMY:UnitType = new UnitType(4); public static var numOfObjects:int = 0; public static var objects:Vector.<UnitType> = new Vector.<UnitType>(); Enumiration.creaded (true); public function UnitType(value:uint) { super (value); numOfObjects ++; objects.push(this); } }
__________________
There is no thing in this world that is not simple. |
|
|||||
|
[+ 1.0 08.10.14]
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
да, все верно. Я могу получить список экземпляров, но мне также нужен список констант иначе я не могу уточнить создан ли был экземпляр для того чтобы его сделали значением константы класса, либо просто кто-то и где-то в коде вызвал конструктор. Собственно, Enumiration.created () блокирует дальнейшие вызовы конструктора. Только список экземпляров ничего не даст.
|
|
|||||
public static function isValidValue(type:String):Boolean { var m_constNameList:XMLList = describeType(Layers).descendants("constant"); for each(var obj:Object in m_constNameList) { if (type == Layers[obj.@name]) { return true; } } return false; } Судя из кода, количество констант можно с помощью вызова метода XMLList.length()
__________________
There is no thing in this world that is not simple. |
|
|||||
|
[+ 1.0 08.10.14]
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Спасибо большое. Для того чтобы приблизиться к вызову метода describeType, стал вытаскивать ссылку на класс наследник и неожиданно выяснил что при создании экземпляра в качестве значения его константы он не успевает определить наименование класса:
В итоге получил нужную проверку |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|