You have 2 options that I can see: either make it the inner class of the pool, or make the allocate package-private method and put it in the same package as the pool.
EDIT: Ah. Just make the constructor private, and then override any method that Pool uses to create new instances. As a (rough) example using your frame above:
public abstract class Pool<T> { public abstract T getNewObject(); public T obtain(){ return getNewObject(); } public void free(T obj) {} }
and
public class GameObject {
Constructor
GameObject happily inaccessible to anyone else.
source share