|
|
|||||
Цитата:
public class Enumeration { public function Enumeration() { } private var _commonValue:*; public function get commonValue():*// Это для обобщенных алгоритмов над всеми перечислениями { return _commonValue; } } public class UintEnumeration extends Enumeration { public function UintEnumeration() { } private var _value:uint; public function set value(value:uint):uint { _value = value; _commonValue = value; } public function get value():uint { return _value; } } Цитата:
На практике такой стиль не подводил(без всяких базовых классов - они практически бесполезны и с забиванием большого гвоздя на проверки создания не в том месте - они не от чего не защищают): public class UnitType { // Список всех значений (не всегда нужен, кстати) public static const allUnits:Vector.<Unit> = new Vector.<Unit>(); public static const Unit1:UnitType = new UnitType(1); public static const Unit1:UnitType = new UnitType(2); public static const Unit1:UnitType = new UnitType(3); private var _code:uint; public function get code():uint { return _code; } public function UnitType(code:uint) { _code = code; allUnits.Add(this);// заполнение списка } } |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Вчера не спрашивал, потому что думал, пойму. Но нет, я и статью прочёл и код смотрел сто раз.
Объясните на простом языке, для чего это. |
|
|||||
если честно, не совсем понял в чем проблема
вот такой вариант, например package { import flash.display.Sprite; public class Main extends Sprite { public function Main():void { var list:Vector.<Enumeration> = Enumeration.getElementsList(UnitType); trace("list : " + list); var element:Enumeration = Enumeration.getElementByValue(1, UnitType); trace("element : " + element); var isHero:Boolean = (element === UnitType.HERO); trace("isHero : " + isHero); } } } //=================================// import flash.utils.describeType; class Enumeration { public var value:*; public function Enumeration(value:*) { this.value = value; } public static function getElementsList(enumClass:Class):Vector.<Enumeration> { var list:Vector.<Enumeration> = new Vector.<Enumeration>(); var constList:XMLList = describeType(enumClass).constant; for each (var item:XML in constList) { list.push(enumClass[item.@name]) } return list; } public static function getElementByValue(value:*, enumClass:Class):Enumeration { var constList:XMLList = describeType(enumClass).constant; for each (var item:XML in constList) { if (enumClass[item.@name].value == value) return enumClass[item.@name]; } return null; } } //=================================// class UintEnumeration extends Enumeration { public function UintEnumeration(value:uint) { super(value); } } //=================================// class UnitType extends UintEnumeration { public static const HERO:UnitType = new UnitType(1); public static const WARRIOR:UnitType = new UnitType(2); public function UnitType(value:uint) { super(value); } } |
|
|||||
Регистрация: May 2011
Сообщений: 221
|
expl, Я вот вобщем-то тоже придерживаюсь идеи о том, что адекватнее всего иметь список констант уже заранее сформированный. при том может быть, если уж имеем дело со списком то и хранить их например в хэше и запрашивать по ключу, нежели изголяться через describeType.
Akopalipsis, Для чего что именно? Реализация перечислений? Об этом я писал несколько выше: Цитата:
silin, Если честно, мне кажется, что проблема на деле в странно поставленной задаче. Сам запутался и вас запутал. В общем на деле пожалуй ваш вариант наиболее приближен к тому, что как я понял от меня хотели. Сформирую свой вариант и, если будет какой-то ответ по заданию, расскажу, что же там была за черная магия в описании. Вобщем всем спасибо, вы мне очень помогли ) |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Хочется полюбопытствовать, в конструкторах классов присутствует параметр id, так вот он для того, чтобы в каком-нибудь особом случаи сравнивать по нему? Типа -
Правильно я понял? |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Немного не по теме - а при помощи describeType можно только public свойства увидеть?
Почему-то мне кажется, что можно и к остальным обращаться-считать, но у меня не получается и мне уже кажется, что я что-то напутал. |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
silin Спасибо! Ужас.
|
Часовой пояс GMT +4, время: 05:00. |
|
« Предыдущая тема | Следующая тема » |
Теги |
AS3 , enum , static |
|
|