Для игры, которую я пытаюсь разработать, я пишу класс пула ресурсов, чтобы перерабатывать объекты, не вызывая "новый" оператор. Я хотел бы иметь возможность указывать размер пула, и я хотел бы, чтобы он был строго типизирован.
По этим соображениям я думаю, что вектор будет моим лучшим выбором. Однако, поскольку 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. Удачи.