Показать сообщение отдельно
Старый 12.11.2011, 21:26
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Проблема принципиальная (нет генериков в as3) - либо приведение типов, либо копипаста кода.
Приведение типов обычно, как бы не было противно его делать - выигрывает.

В критических случаях, где типизация очень нужна, можно обернуть базовый нетипизированный класс, пример обертки для хеша:
Код AS3:
public class TypedObject
{
    private var _object:Object = {};
 
    public function get(key:String):MyType
    {
       return _object[key];
    }
 
    public function set(key:String, value:MyType):void
    {
       _object[key] = value;
    }
}
Но если такое требуется для многих классов, или надо передавать сам хеш как универсальный тип - лучше смириться с приведениями.

Ну или, если требуется универсальная обработка TypedHash - дальше изголяться (пробовал такое для итератора - оверхед жуткий - выкинул нафиг и забил - итераторы только для haXe хороши):

Код AS3:
public interface IHashable
{
    function getUniversal(key:String):Object;
    function setUniversal(key:String, value:Object):void;
}
 
public class TypedObject implements IHashable
{
    private var _object:Object = {};
 
    public function get(key:String):MyType// Этим пользуется кто знает, что им TypedObject передали
    {
       return getUniversal(key) as MyType;
    }
 
    public function set(key:String, value:MyType):void
    {
       setUniversal(key, value);
    }
 
    public function getUniversal(key:String):Object// Этим пользуется тот, кто знает только о IHashable
    {
         return _object[key];
    }
 
    public function setUniversal(key:String, value:Object):void
    {
        _object[key] = value;
    }
}


Последний раз редактировалось expl; 12.11.2011 в 21:37.