Escolar Documentos
Profissional Documentos
Cultura Documentos
ricas
fabrizzio@inf.ufg.br professor.fabrizzio@gmail.com
Instituto de Informtica
Universidade Federal de Gois
Aula 2
25 de maio de 2012
Exemplo
Por exemplo, vamos utilizar a classe TV abaixo.
1 public class TV {
2 int tamanho;
3 int canal;
4 int volume;
5 boolean ligada;
6
7 public TV(int tamanho, int canal, int volume, boolean ligada
) {
8 this.tamanho = tamanho;
9 this.canal = canal;
10 this.volume = volume;
11 this.ligada = ligada;
12 }
13 }
Agora, no ser possvel criar uma cpia desse objeto para uma
varivel do mesmo tipo de sua instncia. Neste caso, devemos
fazer o typecast explcito da classe.
1 public class ExemploTypecast4 {
2 public static void main(String[] args) {
3 Object obj = new TV(29, 1, 0, false);
4 TV tv = (TV) obj;
5 TV tv2 = new TV(29, 1, 0, false);
6 System.out.println("A varivel tv cpia de obj" +
7 "\nobj: " + obj.toString() +
8 "\ntv: " + tv.toString());
9 System.out.println("TV2 outro objeto: " + tv2.toString
());
10 }
11 }
Por exemplo, vamos imaginar que ser criada uma classe cha-
mada Aparelho que ir conter um objeto de alguma outra classe.
Para que essa classe possa aceitar qualquer tipo de classe, de-
vemos fazer uso de generics.
Generics indicado como um identificador entre os sinais de
maior e menor < > .
Para criar uma classe usando generics, basta que logo aps o
nome da classe coloquemos o indicador genrico. Esse indica-
dor genrico simplesmente uma letra na qual ser substituda
dentro da classe no momento da execuo.
E a classe radio:
1 public class Radio {
2 public static int AM = 1;
3 public static int FM = 2;
4 private float frequencia;
5 private int volume;
6 private int banda;
7
8 public Radio(float frequencia, int volume, int banda) {
9 this.frequencia = frequencia;
10 this.volume = volume;
11 this.banda = banda;
12 }
13 // mtodos get e set
14 }
Wildcards;
e Subtipos;
Prof. Fabrzzio Alphonsus A. M. N. Soares | Conceitos avanados de programao 31/103
Exemplo mais robusto I
O que boxing?
Em certas situaes, mais conveniente utilizar objetos no lugar
de tipos primitivos (byte, short, int, long, float, double, boolean
e char).
Assim, para cada tipo primitivo, foi criado uma classe Wrapper
(Byte, Short, Integer, Long, Float, Double, Boolean e Charac-
ter) que serve para encaixotar (boxing) o tipo primitivo.
Boxing consiste em inserir um tipo primitivo dentro de um ob-
jeto, de forma que o valor primitivo possa ser usado como um
objeto.
Vejamos o exemplo:
1 public class TesteAutoboxing {
2 public static void main(String[] args) {
3 Integer a = 2; // autoboxing
4 Integer b = 2; // equivale a Integer b = new Integer(2);
5 a++; // autounboxing e autoboxing
6 b++; // autounboxing e autoboxing
7 // int x = a.intValue(); // para jdk < 1.5, isto era
necessrio
8 // int y = b.intValue();
9 // System.out.println(x+y); // a linha abaixo equivalente
a esta
10 System.out.println(a+b); // graas a autounboxing
11 }
12 }
Onde:
Tipo - uma classe ou algum tipo primitivo;
item - a varivel que receber um elemento do array ou
conjunto em cada iterao (loop);
array_ou_conjunto - uma array ou conjunto contendo
vrios elementos;
Prof. Fabrzzio Alphonsus A. M. N. Soares | Conceitos avanados de programao 60/103
Autoboxing em lao de repetio for II
Veremos o uso do for melhorado neste exemplo a seguir. Note
que iremos percorrer uma array de tipos primitivos char e uma
array (objeto) de inteiros (Integer):
1 import java.util.ArrayList;
2 public class AutoboxingEmRepeticaoFor {
3 public static void main(String[] args) {
4 char[] ola = {o, l, a};
5 // percorre a array ola
6 for (Character letra: ola) // autoboxing
7 System.out.println(letra);
8
9 // esta um array com vrios elementos inteiros;
10 // veremos esta sintaxe quando for estudado "Genericos"
11 ArrayList<Integer> numerospares = new ArrayList<Integer>();
12
13 // inclui objetos inteiros no array
14 numerospares.add(new Integer(2));
15 numerospares.add(new Integer(4));
16 numerospares.add(new Integer(6));
17 numerospares.add(new Integer(8));
18
19 // realiza o autounboxing de cada elemento Integer
20 for (int i: numerospares)
21 System.out.println(i);
22 }
23 }
Isso nos leva regra de consistncia que diz que: Sempre que
sobrescrever equals() sobrescreva tambm hashCode() de forma
compatvel. De forma compatvel significa que : Se a.equals(b)
verdade ento tambm verdade que a.hashCode()==b.hashcode()
Ento temos que vier com fato que nossas funes de hash vo
produzir cdigo iguais em algum ponto. A isso se chama Coliso
de Hash. O objetivo diminuir as colises, ou seja diminuir a
frequencia com que dois objetos diferentes produzem o mesmo
cdigo de hash. Quanto menos colises, mais eficiente a nossa
funo de hash.
15 SortedMap (I)
16 TreeMap (C)
1 Colees
Collection: interface que define operaes comuns de
colees. Esta interface possui duas sub-interfaces - Set
(Conjunto) e List (Lista);
2 Conjuntos
Set: implementao de Collection, que modela um
conjunto de elementos nicos;
HashSet: implementao de Set, modela conjuntos no
ordenados;
SortedSet: implementao de Set, modela conjuntos
ordenados;
3 Listas
Prof. Fabrzzio Alphonsus A. M. N. Soares | Conceitos avanados de programao 91/103
Definindo cada uma das implementaes
II
array ArrayList
no tem dimenso dinmica tem dimenso dinmica
suporta tipos primitivos no suporta tipos primitivos diretamente
no uma classe uma classe
no suporta mtodos suporta mtodos
possui atributo length no possui atributo length
18 }
19 }
18 Object[] toArray();
19 <T> T[] toArray(T[] a);
20 }
1 import java.util.*;
2 public class TesteArray {
3 public static void main(String[] args) {
4 ArrayList<String> a1 = new ArrayList<String>();
5 ArrayList<String> a2 = new ArrayList<String>();
6 a1.add("a");
7 a1.add("b");
8 a1.add("c");
9 a2.add("d");
10 a2.add("e");
11 a2.add("f");
12 Iterator i1 = a1.iterator();
13 Iterator i2 = a2.iterator();
14 // imprime a1
15 while (i1.hasNext()) {
16 System.out.println(i1.next());
17 }
18 // imprime a2
19 while (i2.hasNext()) {
20 System.out.println(i2.next());
21 }
22 }
23 }