/** @noinspection UnusedDeclaration*/ class LimitedPool<T> { private int capacity; private final ObjectFactory<T> factory; private Object[] storage; private int index = 0; public LimitedPool(final int capacity, ObjectFactory<T> factory) { this.capacity = capacity; this.factory = factory; storage = new Object[capacity]; } interface ObjectFactory<T> { T create(); void cleanup(T t); } public T alloc() { if (index >= capacity) return factory.create(); if (storage[index] == null) { storage[index] = factory.create(); } <error descr="Incompatible types. Found: 'java.lang.Object[]', required: 'T'">return storage;</error> } }