Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.06.2014, 16:07
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 1  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
По умолчанию Список констант класса

Необходимо получить список констант класса, чтобы написать корректное наследование от Enumiration

Одним из ключевых свойств паттерна Enumiration является обязательное условие создания экземпляров перечисления исключительно через константы.

Собственно на данный момент у меня это осуществляется методом Evaluation.created (); Любые попытки вызвать конструктор после этого будут выкидывать ошибки

Код AS3:
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);
		}
 
	}
Хочется поднять это на более верхний уровень и избежать вызова метода Enumiration.creaded (true); Но не совсем понятно как это можно сделать. Есть вариант сравнивать количество экземпляров класса с количеством констант класса, но я не знаю как получить список констант класса.

Старый 09.06.2014, 16:10
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Можно получить число и список экземпляров, а не список констант.
Код AS3:
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.

Старый 09.06.2014, 16:28
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 3  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
да, все верно. Я могу получить список экземпляров, но мне также нужен список констант иначе я не могу уточнить создан ли был экземпляр для того чтобы его сделали значением константы класса, либо просто кто-то и где-то в коде вызвал конструктор. Собственно, Enumiration.created () блокирует дальнейшие вызовы конструктора. Только список экземпляров ничего не даст.

Старый 09.06.2014, 16:36
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код AS3:
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;
}
Нашёл в гугле такой вот код. Он должен проверять класс Layers на наличие константы с передаваемым в метод именем типа String. Сам не тестил, но, надеюсь, он работает.

Судя из кода, количество констант можно с помощью вызова метода XMLList.length()
__________________
There is no thing in this world that is not simple.

Старый 09.06.2014, 17:01
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 5  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
Спасибо большое. Для того чтобы приблизиться к вызову метода describeType, стал вытаскивать ссылку на класс наследник и неожиданно выяснил что при создании экземпляра в качестве значения его константы он не успевает определить наименование класса:

Код AS3:
var className:String = getQualifiedClassName (this);
var enumClass:Object = getDefinitionByName (className);
// если экземпляр создан не через константу
if (enumClass != null) {
	//throw new Error(value);
}
В итоге получил нужную проверку

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.