Programação Java: Tudo sobre Generics
Um dos objetivos do projeto original para Java era manter a linguagem mais simples possível. A desenvolvedora do idioma levou alguns recursos desnecessariamente complicados de C ++ e jogou-os para fora da janela. O resultado foi uma linguagem que era elegante e elegante. Algumas pessoas disseram que a linguagem era muito elegante.
Então, depois de vários anos de discussão e brigas, Java tornou-se um pouco mais complicado. Até o ano de 2004, Java teve enum tipos, reforçada para loops, importação estática, e alguns outros novos recursos interessantes. Mas o respeito falou novo recurso mais foi a introdução dos genéricos.
ArrayListpessoas = new ArrayList () -
O uso de qualquer coisa como era novo em Java 5.0. No velho estilo de Java, você escreveria
pessoas ArrayList = new ArrayList () -
Naqueles dias, um ArrayList pode armazenar quase qualquer coisa que você queria colocar nele - um número, um Conta, uma Quarto, uma Corda . . . qualquer coisa. o ArrayList classe era muito versátil, mas com essa versatilidade vieram algumas dores de cabeça. Se você pode colocar qualquer coisa em um ArrayList, você não poderia facilmente prever o que você iria ficar fora de um ArrayList.
Em particular, você não poderia facilmente escrever código que achei que você tinha armazenado certos tipos de valores no ArrayList. Aqui está um exemplo:
coisas ArrayList = new ArrayList () - things.add (nova Conta ()) - Conta MyAccount = things.get (0) - // NÃO USE ESTE. É o código BAD.
Na terceira linha, a chamada para get (0) agarra o valor mais próximo na coisas coleção. A chamada para get (0) é bom, mas, em seguida, o compilador engasga com a tentativa de atribuição de minha conta. Você receberá uma mensagem na terceira linha dizendo que o que você começa a partir do coisas lista não pode ser enchido no minha conta variável.
Você receber essa mensagem, porque, no momento em que o compilador atinge a terceira linha, ele se esqueceu de que o item adicionado na segunda linha era do tipo Conta!
A introdução dos genéricos corrige esse problema:
coisas ArrayList = new ArrayList () - things.add (nova Conta ()) - Conta MyAccount = things.get (0) - // usar este código em seu lugar. É BOM CODE.
Adicionando em dois lugares informa o compilador que coisas lojas Conta instâncias - nada mais. Então, na terceira linha no código anterior, você recebe um valor da coisas coleção. Então, porque coisas única lojas Conta objetos, você pode fazer minha conta referem-se a esse novo valor.
Java 5.0 adicionou genéricos de Java. Mas logo após o nascimento de Java 5.0, os programadores notaram como desajeitado o código para os genéricos podem ser. Afinal, você pode criar os genéricos dentro de genéricos. A ArrayList pode conter um grupo de matrizes, cada um dos quais pode ser um ArrayList. Então você pode escrever
ArrayList[]> Bagunça = new ArrayList []> () -
Toda a repetição em que bagunça declaração dá aos programadores uma dor de cabeça! Para evitar essa feiúra, Java 7 e versões posteriores têm um operador de diamante, lt;>. O operador de diamante diz Java para reutilizar tudo o que stuff insanamente complicado você colocar na parte anterior da declaração genérica.
Neste exemplo, a lt;> diz Java para reutilizar
ArrayList[]> Bagunça = new ArrayListlt;>() -
Em Java 7 e, mais tarde, você pode escrever qualquer um destes bagunça declarações - a declaração original, desagradável com duas ocorrências de ArrayList
Sim, o código simplificada ainda é complicada. Mas sem toda a ArrayList