Alocando array de um tipo genérico

Bem, como muitos aqui devem saber, uma das limitações do uso de generics e não poder criar um array de um tipo genérico. Por exemplo, o código abaixo não compila:

class ArrayGenerico<T>{
  T [] array = new T[10];
}

Porém, eu observei que a implementação de ArrayList do método T[] toArray(T []) da interface Collection é capaz de realizar esta proeza, caso o array passado no argumento não suporte o tamanho da coleção. Alguém sabe como isto é possível ? Seria através de reflections ? Ou super-poderes de API da linguagem ?