Vídeo: O que são Estruturas de Dados? 2024
Uma das metas de design original para Java era manter o idioma o mais simples possível. O desenvolvedor do idioma levou alguns recursos desnecessariamente complicados do C ++ e jogou-os pela janela. O resultado foi uma linguagem elegante e elegante. Algumas pessoas disseram que o idioma era muito elegante.
Então, depois de vários anos de discussão e discussões, o Java tornou-se um pouco mais complicado. Até o ano de 2004, o Java tinha tipos de enum, aprimorado para loops, importação estática e outros novos recursos interessantes. Mas o recurso mais falado sobre a nova era a introdução de genéricos.
ArrayList people = new ArrayList ();
O uso de qualquer coisa como era novo no Java 5. 0. No Java antigo, você escreveria
ArrayList people = new ArrayList ();
Naqueles dias, um ArrayList poderia armazenar quase qualquer coisa que você quisesse colocar nela - um número, uma conta, um quarto, uma String … qualquer coisa. A classe ArrayList foi muito versátil, mas com essa versatilidade surgiram algumas dores de cabeça. Se você pudesse colocar qualquer coisa em um ArrayList, você não poderia facilmente prever o que você iria sair de um ArrayList.
Em particular, você não poderia escrever facilmente o código que supunha que havia armazenado certos tipos de valores no ArrayList. Aqui está um exemplo:
ArrayList things = new ArrayList (); coisas. adicionar (nova Conta ()); Conta myAccount = coisas. obter (0); // NÃO USE ESTE. É MAU CÓDIGO.
Na terceira linha, a chamada para obter (0) agarra o valor mais antigo na coleção de coisas. A chamada para obter (0) está bem, mas o compilador bloqueia a tentativa de atribuição para o meu número. Você recebe uma mensagem na terceira linha dizendo que tudo o que você obtém da lista de coisas não pode ser preenchido na variável myAccount.
Você recebe esta mensagem porque, quando o compilador chegar à terceira linha, esqueceu que o item adicionado na segunda linha era do tipo Conta!
A introdução de genéricos corrige esse problema:
ArrayList coisas = nova ArrayList (); coisas. adicionar (nova Conta ()); Conta myAccount = coisas. obter (0); // USE ESTE CÓDIGO INSTEAD. É UM BOM CÓDIGO.
Adicionar em dois lugares diz ao compilador que as coisas armazenam as instâncias da conta - nada mais. Então, na terceira linha do código anterior, você obtém um valor da coleção de coisas. Então, porque as coisas armazenam apenas objetos de Conta, você pode fazer meu número de referência referir-se a esse novo valor.
Java 5. 0 adicionou genéricos a Java. Mas, logo após o nascimento de Java 5. 0, os programadores perceberam o quanto o código de genéricos pode ser desajeitado.Afinal, você pode criar genéricos dentro dos genéricos. Um ArrayList pode conter um monte de arrays, cada um dos quais pode ser um ArrayList. Então você pode escrever
ArrayListmess = new ArrayList ();
Toda a repetição naquela declaração da bagunça dá aos programadores uma dor de cabeça! Para evitar essa feiúra, as versões Java 7 e versões posteriores têm um operador de diamante , . O operador de diamante diz a Java para reutilizar qualquer coisa insanamente complicada que você colocou na parte anterior da declaração genérica.
Neste exemplo, o Java diz para reutilizar
ArrayListmess = new ArrayList ();
Em Java 7 e posterior, você pode escrever qualquer uma dessas declarações de bagunça - a declaração original e desagradável com duas ocorrências de ArrayList [], ou a declaração simplificada (apenas ligeiramente desagradável) com o operador de diamante e apenas uma ArrayList [] ocorrência.
Sim, o código simplificado ainda é complicado. Mas sem toda a repetição ArrayList [], o código simplificado é menos complicado. O operador de diamante Java 7 tira uma chance para você copiar algo incorretamente e ter um grande erro em seu código.