Сильно типизированная коллекция с несколькими базовыми типами в ActionScript (Vector <T, T>)? - PullRequest
6 голосов
/ 23 марта 2011

Есть ли у ActionScript какой-либо способ обработки строго типизированного списка с несколькими базовыми типами?

Я на самом деле ищу что-то типа Vector<T,T>?

Возможно ли это?

Или единственный способ сделать это - создать мой собственный класс, который принимает, скажем, String и Number в конструкторе и создает Vector<T> из этого класса?

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Нет, не по стандарту.Если элементы не являются одним из основных типов, вы можете создать Вектор интерфейсов или суперклассы.Например, вектор объектов DisplayObject, которые содержат смесь видеороликов и спрайтов (которые оба наследуются от объекта DisplayObject).

Например:

var v:Vector.<DisplayObject> = new <DisplayObject>[
  new MovieClip(), 
  new Sprite(), 
  new MovieClip()
];

trace(v[0].alpha); // outputs 1
trace(v[0].currentFrame); // error - not a DisplayObject property

В этом случае элемент вектороввыставить свойства и методы самого себя, которые проистекают из типа Векторы.Но это именно та причина, по которой вы должны использовать векторы, это гарантирует тип элементов, с которыми вы работаете.

Я не знаю вашего конкретного случая или цели, но я бы подумал, зачем вам нужен смешанный тип в векторе.Как вы сказали, альтернативным вариантом будет создание класса-оболочки.Приведенный ниже пример далеко не завершен, но является отправной точкой.

class Wrapper {
    public var _value:*; // should be private with get/set's

    public function Wrapper(value:*) {
        if(value is String || value is Number) {
            _value = value;
        }
    }
}
0 голосов
/ 23 марта 2011

Вы не можете этого сделать, поэтому я бы пошел с вашим предложением: создать специальный класс, содержащий два свойства (скажем, Number, String) и создать вектор этого.

...