Manipulação de conteúdos de coleções

As classes que implementam as coleções em Java têm como conteúdo objetos genéricos, manipulados como referências para Object. Como todas as classes são derivadas de Object, qualquer objeto de qualquer classe pode estar contido nessas estruturas. Variáveis de tipos primitivos de Java (tais como boolean, byte, char e int) não podem ser armazenadas diretamente nessas estruturas, pois não são objetos -- nesses casos, classes wrappers devem ser utilizadas.

Outro aspecto que vale a pena destacar é o uso do mecanismo de coerção (upcast e downcast). Quando se armazena qualquer objeto em uma dessas estruturas, realiza-se automaticamente um upcast da classe desse objeto para a classe Object. Assim, o seguinte trecho de código é perfeitamente válido:

   String elem = "xyz";
   List coll = new ArrayList();
   coll.add(elem);

Neste caso, a coerção de elem de String para Object é automática. (Observe também o uso do upcast na segunda linha do exemplo.) No entanto, a retirada de qualquer elemento da estrutura retorna um Object e um downcast explícito é necessário para recuperar o tipo específico do objeto:

   elem = (String) coll.get(0);