Libgdx池用于不同类型的子对象

时间:2015-07-06 12:59:34

标签: java memory-management libgdx

我有一个单元类和它的一些子类(Archer,Swordsman等)。 如何创建一个池来回收所有类型单元的子类?

1 个答案:

答案 0 :(得分:2)

这是不可能的,因为Pool只能包含一种特定类型的对象。否则你可能会有这样的事情:

Pool<Unit> unitPool = ...;
Archer acher = new Archer();
unitPool.free(archer); // we free an Archer, who is a Unit
Unit swordsmanUnit = unitPool.obtain(); // we can obtain only Units
Swordsman swordsman = (Swordsman) swordsmanUnit; // This is actually an Archer and will result in a ClassCastException

幸运的是,libgdx附带了一个名为Pools的实用程序,可以轻松汇集许多不同的类。它为每个类创建一个ReflectionPool,并从正确的池中释放/获取对象。只需制作UnitPoolable

Archer archer = Pools.obtain(Archer.class);
Swordsman swordsman = Pools.obtain(Swordsman.class);
// ...
Pools.free(archer);
Pools.free(swordsman);