Phase 15 of 20 · Topic 15.5

Generic Array Creation Restrictions & Workarounds

1Concept

In Java, generic array creation (`new T[10]` or `new List<String>[10]`) is strictly illegal. Arrays are reifiable (they know and enforce their component type at runtime), whereas generics are non-reifiable (erased at runtime). The standard workaround is casting an `Object[]` or using `Array.newInstance()`.

2Architecture Diagram

new T[10]; ---> COMPILE ERROR: Cannot create generic array of T
Workaround: (T[]) new Object[capacity] OR Array.newInstance(clazz, capacity)

3Code Example

Core Java
import java.lang.reflect.Array;

public class GenericArrayWorkaroundDemo<T> {
    private T[] elements;

    @SuppressWarnings("unchecked")
    public GenericArrayWorkaroundDemo(Class<T> clazz, int capacity) {
        // Type-safe array creation via Reflection
        elements = (T[]) Array.newInstance(clazz, capacity);
    }

    public void set(int index, T item) { elements[index] = item; }
    public T get(int index) { return elements[index]; }

    public static void main(String[] args) {
        GenericArrayWorkaroundDemo<String> buffer = new GenericArrayWorkaroundDemo<>(String.class, 3);
        buffer.set(0, "Alpha");
        buffer.set(1, "Beta");
        System.out.println("Retrieved from buffer: " + buffer.get(0) + ", " + buffer.get(1));
    }
}

4Expected Output

Retrieved from buffer: Alpha, Beta

5Key Takeaways

  • `new T[10]` is illegal because array covariance (`Object[] o = new String[10]`) clashes with type erasure.
  • Always prefer `List<T>` over raw arrays when designing generic enterprise components.
  • Annotate unavoidable unchecked casts with `@SuppressWarnings("unchecked")`.