Принудительно разобрать родительский тип на дочерний?

У меня есть класс, который расширяет многие другие классы. Так что теперь я использую GenericPool для повторного использования предметов для повышения производительности. Но проблема в том, что я не могу создать дочерний класс, например:

StarDustSprite sprStarDust = (StarDustSprite) splStarDust[rndGenerator.nextInt(Parent.andStarDustR.length)].obtainPoolItem();

(StarDustSprite расширяет класс Sprite, а функция getPoolItem() возвращает объект Sprite).

Так могу ли я принудительно разобрать его? Или мне нужно сделать 10 классов GenericPool, если у меня есть 10 дочерних классов?

Спасибо.


person Luke Vo    schedule 04.04.2011    source источник
comment
Осторожно: повторное использование объектов для повышения производительности может привести к ухудшению производительности!   -  person Stephen C    schedule 04.04.2011
comment
Не могли бы вы объяснить, почему? Каждый раз, когда я создаю Sprite, я должен создавать Texture и TextureRegion, а также инициализировать Sprite (я имею в виду класс, который расширяет Sprite).   -  person Luke Vo    schedule 04.04.2011


Ответы (1)


Могу ли я принудительно разобрать его?

Нет, вы не можете так бросить, по той же причине, по которой вы не можете бросить, например, Object в String.

Или мне нужно создать 10 классов GenericPool, если у меня есть 10 дочерних классов?

Полагаю, что так. Но я бы не решил это так, во-первых.

Если вы действительно хотите повторно использовать объекты, я предлагаю вам просто лениво инициализировать список объектов, который вы сможете использовать повторно.

person aioobe    schedule 04.04.2011
comment
Спасибо за ваш ответ. Но я не могу инициализировать этот список, потому что точно не знаю, сколько мне понадобится. Но есть много дочерних классов, поэтому я надеюсь, что есть лучшее решение! - person Luke Vo; 04.04.2011
comment
Вот почему вы должны делать это лениво, то есть по требованию. Найдите ленивую инициализацию. - person aioobe; 04.04.2011
comment
Хорошо, спасибо, похоже, скопировать класс GenericPool проще, потому что мне нужно только изменить имя типа класса. Проблема решена! - person Luke Vo; 04.04.2011