Для игры, которую я пытаюсь разработать, я пишу класс пула ресурсов, чтобы перерабатывать объекты без вызова оператора «new». Я хотел бы иметь возможность указать размер пула, и я бы хотел, чтобы он был строго напечатан.
Из-за этих соображений я думаю, что Вектор был бы моим лучшим выбором. Однако, поскольку Vector является последним классом, я не могу его расширить. Итак, я решил использовать композицию вместо наследования, в данном случае.
Проблема, с которой я сталкиваюсь, заключается в следующем: я хочу создать экземпляр класса с двумя аргументами: размер и тип класса, и я не уверен, как передать тип в качестве аргумента.
Вот что я попробовал:
public final class ObjPool
{
private var objects:Vector.<*>;
public function ObjPool(poolsize:uint, type:Class)
{
objects = new Vector.<type>(poolsize); // line 15
}
}
А вот ошибка, которую я получаю от FlashDevelop при попытке собрать:
\ src \ ObjPool.as (15): col: 18 Ошибка: доступ к неопределенному типу свойства.
Кто-нибудь знает способ сделать это? Похоже, что компилятор Flash не любит принимать имена переменных в нотации скобок Vector. (Я попытался изменить параметр конструктора "type" на String в качестве теста, но безрезультатно; я также попытался поместить туда getQualifiedClassName, но это тоже не сработало. Нетипизирование объектов var также оказалось бесплодным.) я даже не уверен, является ли тип "Class" правильным способом - кто-нибудь знает?
Спасибо!
Редактировать: Для пояснения я звоню своему классу так:
var i:ObjPool = new ObjPool(5000, int);
Целью является указать размер и тип.
Двойное редактирование: Для тех, кто наткнулся на этот вопрос в поисках ответа, изучите Обобщения в языке программирования Java . На момент написания этой статьи они не реализованы в ActionScript 3. Удачи.