Динамически создать экземпляр типизированного вектора из аргумента функции?

Для игры, которую я пытаюсь разработать, я пишу класс пула ресурсов, чтобы перерабатывать объекты, не вызывая "новый" оператор. Я хотел бы иметь возможность указывать размер пула, и я хотел бы, чтобы он был строго типизирован.

По этим соображениям я думаю, что вектор будет моим лучшим выбором. Однако, поскольку Vector является последним классом, я не могу его расширить. Итак, я решил, что в этом случае я буду использовать композицию вместо наследования.

Проблема, которую я вижу, заключается в следующем - я хочу создать экземпляр класса с двумя аргументами: размером и типом класса, и я не уверен как передать тип в качестве аргумента.

Вот что я пробовал:

public final class ObjPool
{
    private var objects:Vector.<*>;

    public function ObjPool(poolsize:uint, type:Class)
    {
        objects = new Vector.(poolsize);  // line 15
    }
}

И вот ошибка, которую я получаю от FlashDevelop, когда пытаюсь построить:

\ src \ ObjPool.as (15): col: 18 Ошибка: доступ к неопределенному типу свойства.

Кто-нибудь знает, как это сделать? Похоже, компилятор Flash не любит принимать имена переменных в скобках Vector. (Я попытался изменить параметр конструктора "type" на String в качестве теста, но безрезультатно; я также попытался поместить туда getQualifiedClassName, и это тоже не сработало. Распознавание типов объектов var тоже было бесплодным.) Кроме того, я даже не уверен, что тип «Class» - правильный способ сделать это - кто-нибудь знает?

Спасибо!

Edit: Для пояснения, я согласен вызов моего класса следующим образом:

var i:ObjPool = new ObjPool(5000, int);

Намерение состоит в том, чтобы указать размер и тип.

Двойное редактирование: для тех, кто наткнется на этот вопрос в поисках ответа, пожалуйста, исследуйте Generics на языке программирования Java . На момент написания этой статьи они не реализованы в ActionScript 3. Удачи.

5
задан jedd.ahyoung 2 September 2011 в 19:17
поделиться