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

Вернуться   Форум Flasher.ru > Блоги > Good

Оценить эту запись

Волшебное превращение Object --> Class

Запись от artcraft размещена 04.09.2012 в 14:56
Обновил(-а) iNils 08.09.2012 в 01:17

Искал совсем друге, а наткнулся на этот хак
https://github.com/darronschall/ObjectTranslator

Например, есть объект, допустим, загруженный с сервера json
и класс c аналогичными свойствами
Код AS3:
var o:Object = {n:3};
class A{ public var n:uint; }
AS3 не позволит вам сделать так
Код AS3:
var a:A = o as A;  // ошибка - о это не А
вот тут и можно использовать этот грязный трюк
Код AS3:
var a:A= ObjectTranslator.objectToInstance(o, A) as A;
внутри это устронео так:
- объект cериализируется в ByteArray как AFM
- вносятся правки в ByteArray (подменяется тип объекта)
- ByteArray десеарлизуется в указанный класс

Правда смысла этим пользоваться я не вижу, ведь можно обойтись и без трюков :~)
достаточно просто создать новый инстанс А а потом в цикле пройтись по всем свойствам о и присвоить значения А
Код AS3:
var a:A = new A();
for ( var k:String in o ) {
	a[k] = o[k];
}
Всего комментариев 5

Комментарии

Старый 04.09.2012 18:09 GBee вне форума
GBee
 
Аватар для GBee
Судя по комментам все равно возникнет ошибка, если класс не содержит какого-либо поля, которое есть в нетипизированном объекте. Как и вашем простом цикле.
Старый 04.09.2012 19:24 artcraft вне форума
artcraft
 
Аватар для artcraft
да, простой цикл лучше, но трюк просто интересный, хоть и бессмысленный
Старый 05.09.2012 10:17 zuxul вне форума
zuxul
Смысл "может быть", если производительность трюка больше чем простого цикла.
Но это нужно проверить.
...
Посмотрел исходник. Простой цикл должен быть быстрее.
Может быть тогда "смысл" в удобстве? Попробовал сериализовывать объект с приватными полями - не подставляется, тогда и смысл в удобстве отпадает.
Обновил(-а) zuxul 05.09.2012 в 10:32
Старый 10.09.2012 21:43 dimarik вне форума
dimarik
 
Аватар для dimarik
Я уже упоминал, что нативное инстанцирование и десериализация из потока AMF происходит быстрее, чем перебор полей. Достаточно иметь класс A с полями и/или акцессорами, отмеченными как public, сделать registerClassAlias этого класса и модифицировать AMF поток в соответствии с этим алиасом. Простой readObject в итоге даст вам прирост производительности. Другое дело, — зачем вам нужны эти интстансы?

Если вы заполняете пустую коллекцию этими инстансами, то это нормально, а если необходимо модифицировать существующую, то новые инстансы совершенно не нужны.
Старый 15.10.2012 17:40 kemsky вне форума
kemsky
com.adobe.serializers.utility::TypeUtility
 

 


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


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