Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo Programao II
Lio 13
Introduo Generics
JEDITM
Autor Rebecca Ong Equipe Joyce Avestro Florence Balagtas Rommel Feria Rebecca Ong John Paul Petines Sun Microsystems Sun Philippines
Sistemas Operacionais Suportados NetBeans IDE 5.5 para os seguintes sistemas operacionais: Microsoft Windows XP Profissional SP2 ou superior Mac OS X 10.4.5 ou superior Red Hat Fedora Core 3 Solaris 10 Operating System (SPARC e x86/x64 Platform Edition) NetBeans Enterprise Pack, poder ser executado nas seguintes plataformas: Microsoft Windows 2000 Profissional SP4 Solaris 8 OS (SPARC e x86/x64 Platform Edition) e Solaris 9 OS (SPARC e x86/x64 Platform Edition) Vrias outras distribuies Linux Configurao Mnima de Hardware Nota: IDE NetBeans com resoluo de tela em 1024x768 pixel Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 500 MHz Intel Pentium III workstation ou equivalente 500 MHz Intel Pentium III workstation ou equivalente UltraSPARC II 450 MHz AMD Opteron 100 Srie 1.8 GHz PowerPC G4 Memria 512 MB 512 MB 512 MB 512 MB 512 MB HD Livre 850 MB 450 MB 450 MB 450 MB 450 MB
Configurao Recomendada de Hardware Sistema Operacional Microsoft Windows Linux Solaris OS (SPARC) Solaris OS (x86/x64 Platform Edition) Mac OS X Processador 1.4 GHz Intel Pentium III workstation ou equivalente 1.4 GHz Intel Pentium III workstation ou equivalente UltraSPARC IIIi 1 GHz AMD Opteron 100 Series 1.8 GHz PowerPC G5 Memria 1 GB 1 GB 1 GB 1 GB 1 GB HD Livre 1 GB 850 MB 850 MB 850 MB 850 MB
Requerimentos de Software NetBeans Enterprise Pack 5.5 executando sobre Java 2 Platform Standard Edition Development Kit 5.0 ou superior (JDK 5.0, verso 1.5.0_01 ou superior), contemplando a Java Runtime Environment, ferramentas de desenvolvimento para compilar, depurar, e executar aplicaes escritas em linguagem Java. Sun Java System Application Server Platform Edition 9. Para Solaris, Windows, e Linux, os arquivos da JDK podem ser obtidos para sua plataforma em http://java.sun.com/j2se/1.5.0/download.html Para Mac OS X, Java 2 Plataform Standard Edition (J2SE) 5.0 Release 4, pode ser obtida diretamente da Apple's Developer Connection, no endereo: http://developer.apple.com/java ( necessrio registrar o download da JDK). Para mais informaes: http://www.netbeans.org/community/releases/55/relnotes.html
Introduo Programao II
JEDITM
Auxiliadores especiais
Reviso Geral do texto para os seguintes Pases:
Brasil Tiago Flach Guin Bissau Alfredo C, Bunene Sisse e Buon Olossato Quebi ONG Asas de Socorro
Coordenao do DFJUG
Daniel deOliveira JUGLeader responsvel pelos acordos de parcerias Luci Campos - Idealizadora do DFJUG responsvel pelo apoio social Fernando Anselmo - Coordenador responsvel pelo processo de traduo e reviso, disponibilizao dos materiais e insero de novos mdulos Regina Mariani - Coordenadora responsvel pela parte jurdica Rodrigo Nunes - Coordenador responsvel pela parte multimdia Srgio Gomes Veloso - Coordenador responsvel pelo ambiente JEDITM (Moodle)
Agradecimento Especial
John Paul Petines Criador da Iniciativa JEDITM Rommel Feria Criador da Iniciativa JEDITM
Introduo Programao II
JEDITM
1. Objetivos
A verso 5 do Java trouxe grandes avanos na programao. Inclui extenses significantes sintaxe da linguagem. A mais visvel delas foi a adio de Generics. Nessa lio iremos conhecer os conceitos bsicos relacionados a Generics. Ao final desta lio, o estudante ser capaz de:
Enumerar os benefcios de Generics Declarar classes utilizando Generics Utilizar Generics limitados Declarar mtodos utilizando Generics Usar colees Java com Generics
Introduo Programao II
JEDITM
Introduo Programao II
JEDITM
Introduo Programao II
JEDITM
Essa declarao especifica que o atributo data de um tipo Generic, e depende do tipo de dado com que o objeto BasicGeneric for desenvolvido para trabalhar. Quando declarar uma instncia da classe, deve ser especificada a referncia ao tipo com que se deseja trabalhar. Por exemplo: BasicGeneric <String> basicGeneric = new BasicGeneric <String>(data1); A sintaxe <String> aps a declarao de BasicGeneric especifica que essa instncia da classe ir trabalhar com variveis do tipo String. Podemos trabalhar com variveis do tipo Integer ou qualquer outro tipo de referncia. Para trabalhar com um Integer, o fragmento do cdigo teria a seguinte instruo: BasicGeneric <Integer> basicGeneric = new BasicGeneric <Integer>(data1); Consideremos a declarao para o mtodo getData: public A getData() { return data; } O mtodo getData retorna um valor do tipo A, que mtodo ter um tipo de dado em tempo de execuo, Depois de declarar um objeto do tipo BasicGeneric, especfico. Essa instncia atuar como se tivesse sido especfico, e apenas esse, desde o incio. um tipo Generic. Isso significa que o ou mesmo em tempo de compilao. A ser preso a um tipo de dado declarada para ter esse tipo de dado
No seguinte cdigo, duas instncias da classe BasicGeneric foram criadas. BasicGeneric <String> basicGeneric = new BasicGeneric <String>(data1); String data2 = basicGeneric.getData(); BasicGeneric <Integer> basicGeneric = new BasicGeneric <Integer>(data1); Integer data2 = basicGeneric.getData(); Note que a criao de uma instncia de uma classe que utiliza Generics bem similar criao de uma classe normal, exceto pelo tipo de dado especfico dentro dos sinais <> logo aps o nome do construtor. Essa informao adicional indica o tipo de dado com que voc trabalhar para essa instncia da classe BasicGeneric em particular. Depois de criada a instncia, possvel agora acessar os elementos da classe atravs dela. No existe mais a necessidade do typecast no valor do retorno do mtodo getData, uma vez que j foi decidido que ele ir trabalhar com um tipo de dado de referncia especfico.
Introduo Programao II
JEDITM
Introduo Programao II
JEDITM
4. Generics Limitados
No exemplo mostrado anteriormente, os parmetros de tipo da classe BasicGeneric podem ser de qualquer tipo de dado de referncia. H casos, entretanto, onde voc quer restringir os tipos em potencial usados em instanciaes de uma classe do tipo Generics. Java permite limitar o conjunto de possveis tipos utilizados como argumento na instanciao de classes desse tipo, para um conjunto de subtipos de um determinado tipo amarrado classe. Por exemplo, podemos definir uma classe ScrollPane que utiliza Generics que serviria como um molde para um Container comum com a funcionalidade da barra de rolagem. Em tempo de execuo, o tipo da instncia dessa classe ser, geralmente, uma subclasse de Container, mas o tipo esttico ou geral simplesmente Container. Para limitar as instanciaes de tipo de uma classe, ns usamos a palavra-chave extends seguida pela classe que limita (ou restringe) o tipo Generics como parte de um parmetro de tipo. O exemplo a seguir limita as instanciaes de tipo da classe ScrollPane para subtipos da classe Container. class ScrollPane <MyPane extends Container> { ... } class TestScrollPane { public static void main(String args[]) { ScrollPane <Panel> scrollPane1 = new ScrollPane <Panel>(); // O comando seguinte ilegal ScrollPane <Button> scrollPane2 = new ScrollPane <Button>(); } } A instanciao de scrollPane1 vlida, uma vez que Panel uma subclasse de Container, enquanto a criao de scrollPane2 causaria um erro em tempo de compilao, uma vez que Button no uma subclasse de Container. Usar Generics limitados nos d um adicional, que a checagem esttica de tipos. Como resultado, ns temos a garantia que toda instanciao de um tipo Generics respeita os limites (ou restries) que atribumos a ele. Uma vez que asseguramos que toda instncia de tipo uma subclasse do limite atribudo, podemos chamar, de forma segura, qualquer mtodo encontrado no tipo esttico do objeto. Se no tivssemos colocado nenhum limite explcito no parmetro, o limite default seria Object. Isso significa que no podemos invocar mtodos em uma instncia do limite que no apaream na classe Object.
Introduo Programao II
JEDITM
Introduo Programao II
10
JEDITM
Aqui est um exemplo de uma classe que no utiliza a verso Generics para a criao de uma lista, observe que podemos incluir sem problemas um objeto String entre os outros elementos import java.util.*; class GenericDemo { public static void main(String args[]) { List list = new ArrayList(); list.add(new Integer(1)); list.add(new Integer(2)); list.add("String"); System.out.println(list); Collections.sort(list); System.out.println(list); } } Executar esta classe gerada a seguinte sada: [1, 2, String] Exception in thread "main" java.lang.ClassCastException: java.lang.String at java.lang.Integer.compareTo(Integer.java:35) at java.util.Arrays.mergeSort(Arrays.java:1156) at java.util.Arrays.sort(Arrays.java:1080) at java.util.Collections.sort(Collections.java:117) at GenericDemo.main(GenericDemo.java:10) Java Result: 1 Pelo simples motivo que o Java no sabe como ordenar uma String juntamente com dois
Introduo Programao II 11
JEDITM
objetos inteiros, agora vejamos a mesma classe utilizando agora o Generics: import java.util.*; class GenericDemo { public static void main(String args[]) { List<Integer> list = new ArrayList<Integer>(); list.add(new Integer(1)); list.add(new Integer(2)); list.add("String"); System.out.println(list); Collections.sort(list); System.out.println(list); } } O que acontecer ser um erro de compilao na linha 8, ou seja, o Generics bloqueia os elementos estranhos a lista no permitindo que esta tenha elementos diversos fora o especificado.
Introduo Programao II
12
JEDITM
Instituto CTS Patrocinador do DFJUG. Sun Microsystems Fornecimento de servidor de dados para o armazenamento dos vdeo-aulas. Java Research and Development Center da Universidade das Filipinas Criador da Iniciativa JEDITM. DFJUG Detentor dos direitos do JEDITM nos pases de lngua portuguesa. Banco do Brasil Disponibilizao de seus telecentros para abrigar e difundir a Iniciativa JEDITM. Politec Suporte e apoio financeiro e logstico a todo o processo. Borland Apoio internacional para que possamos alcanar os outros pases de lngua portuguesa. Instituto Gaudium/CNBB Fornecimento da sua infra-estrutura de hardware de seus servidores para que os milhares de alunos possam acessar o material do curso simultaneamente.
Introduo Programao II
13