Java programação: tudo sobre os genéricos

Um dos objetivos do projeto original para Java era manter a linguagem mais simples possível. desenvolvedor do idioma levou alguns recursos desnecessariamente complicados de C ++ e os jogou pela 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 disputas, Java tornou-se um pouco mais complicado. Até o ano de 2004, o Java teve enum tipos, reforçada para loops, importação estática, e alguns outros novos recursos interessantes. Mas o sobre falou novo recurso mais foi a introdução dos genéricos.

ArrayList pessoas = new ArrayList() -

O uso de qualquer coisa como era novo no Java 5.0. No velho estilo de Java, você escreveria

pessoas ArrayList = new ArrayList () -

Nestas dias, uma 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 veio algumas dores de cabeça. Se você poderia 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 ESTA. É o código BAD.

Na terceira linha, a chamada para get (0) agarra o mais antigo valor no coisas coleção. A chamada para get (0) é bom, mas, em seguida, o compilador engasga com a tentativa de cessã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 esta 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:

ArrayList coisas = new ArrayList() -things.add (nova Conta ()) - Conta MyAccount = things.get (0) - // usar este código em seu lugar. É BOM CODE.

adicionando em dois lugares diz ao compilador que coisas lojas Conta casos - nada mais. Então, na terceira linha no código anterior, você recebe um valor a partir do 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 adicionado genéricos para Java. Mas logo após o nascimento de Java 5.0, os programadores notaram como desajeitado o código para os genéricos pode 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[] Gt; bagunça = new ArrayList[] Gt; () -

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; gt;. O operador de diamante diz Java para reutilizar tudo o que coisas insanamente complicado você colocar na parte anterior da declaração genérica.

Neste exemplo, a lt; gt; diz Java para reutilizar [] Gt;, mesmo que você escrever [] Gt; apenas uma vez. Aqui está como o código simplificado Java 7 looks:

ArrayList[] Gt; bagunça = new ArrayListlt; gt;() -

Em Java 7 e posterior, você pode escrever qualquer um destes bagunça declarações - a declaração original, desagradável com duas ocorrências de ArrayList[], ou o simplificado (apenas levemente desagradável) declaração com o operador de diamante e apenas um ArrayList[] ocorrência.

Sim, o código simplificado ainda é complicado. Mas sem toda a ArrayList[] repetição, o código simplificado é menos pesado. O operador de diamante Java 7 tira uma chance para você copiar algo incorretamente e tem um grande erro no seu código.


Publicações relacionadas