Строго типизированная коллекция с несколькими базовыми типами в ActionScript (вектор ‹T,T›)?

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

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

Является ли это возможным?

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


person Ranhiru Jude Cooray    schedule 23.03.2011    source источник


Ответы (2)


Нет, не по стандарту. Если элементы не являются одним из примитивных типов, вы можете создать вектор интерфейсов или суперклассов. Например, вектор DisplayObjects, который содержит смесь MovieClips и Sprites (которые оба наследуются от 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;
        }
    }
}
person Chris    schedule 23.03.2011

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

person Manish    schedule 23.03.2011