Title: Java 5 - Novidades
1Java 5 - Novidades
- Gerente de Tecnologia Vitor Costa
2Novidades
- Tipos genéricos
- Autoboxing/unboxing
- Enhanced for Loop
- Covariância
- Tipos enumerados
- Static Imports
- Annotations (Metadata)
- Argumentos variáveis
- Leituras e escritas formatadas
- Outras novidades...
3Tipos Genéricos
- JSR-14
- Sintaxe mais limpa evita casts
- Verificação em tempo de compilação
- Equivalente ao Template em C, será?
4Tipos Genéricos
List lista new ArrayList() lista.add( new Integer( 100 ) ) int numero ( (Integer) lista.get( 0 ) ).intValue()
ListltIntegergt lista new ArrayListltIntegergt() lista.add( new Integer( 100 ) ) int numero lista.get( 0 ).intValue()
5Construindo Tipos Genéricos
public interface PilhaltEgt E pop() void push(E objeto) public class UtilPilha public static void limpar(Pilhalt?gt pilha) public static void imprimir (Pilhalt? extends Desenhogt pilha)
6Autoboxing/unboxing
- JSR-201
- Elimina a conversão manual entre os tipos
primitivos e suas wrapper classes - Código mais simples de ler
- Facilita a integração dos tipos genéricos
7Autoboxing/unboxing
List lista new ArrayList() lista.add( new Integer( 100 ) ) int numero lista.get( 0 ).intValue()
ListltIntegergt lista new ArrayListltIntegergt() lista.add( 100 ) int numero lista.get( 0 )
8Autoboxing/unboxing
- Se A é igual a B e B é igual a C, então A é igual
a C - Não é mais verdade após Java 5 ?
Integer i1 new Integer( 100 ) int i2 100 Integer i3 new Integer( 100 ) if (i1 i2 i2 i3) System.out.println(OK) if (i1 ! i3) System.out.println(Xiiiii)
9Enhanced for Loop
- JSR-201
- Conhecido como for-each em outras lings.
- Reduz a repetição de código para iterar sobre
arrays ou coleções - Melhor usado com tipos genéricos
10Enhanced for Loop - array
int sum 0 for(int i 0 i lt array.length i) sum arrayi
int sum 0 for(int i array) sum i
11Enhanced for Loop - coleção
for(Iterator i c.iterator() i.hasNext() ) String str (String) i.next() sb.append(str)
for(String str c) sb.append(str)
12Enhanced for Loop
- Não substitui os loops onde é necessário a
utilização de um contador - Não se aplica às iterações onde se deseja remover
ou substituir os elementos - Pode ser mais lento quando usado em conjunto com
coleções muito grandes - Suporte do Enhanced for Loop a qualquer
coleção java.lang.IterableltEgt
13Covariância
- Parte da JSR-14 (tipos genéricos)
- Capacidade de uma subclasse sobrescrever um
método trocando seu tipo de retorno por uma
subclasse do tipo de retorno original
14Covariância
public class SuperClasse public JTextField getCampoTexto() return new JTextField() public class SubClasse extends SuperClasse public JPasswordField getCampoTexto() return new JPasswordField()
15Tipos Enumerados
- JSR-201
- Permite criação de tipos enumerados diretamente
na linguagem (sem ter que recorrer a padrões) - Adiciona um novo termo às palavras reservadas
enum
16Tipos Enumerados
public enum Semaforo VERMELHO, AMARELO, VERDE / ... / Semaforo semaforo Semaforo.VERDE if(semaforo Semaforo.VERMELHO) switch(semaforo) case(Semaforo.VERDE) // ...
17Tipos Enumerados
public enum Planet MERCURY (3.303e23, 2.4397e6), VENUS (4.869e24, 6.0518e6), PLUTO (1.27e22, 1.137e6) private final double mass, radius Planet(double mass, double radius) this.mass mass this.radius radius private double mass() return mass private double radius() return radius public static final double G 6.67300E-11 double surfaceGravity() return G mass / (radius radius)
18Static Imports
- JSR-201
- Importa as funções e variáveis públicas estáticas
de outra classe - Substitui o Constant Interface Antipattern
- Pode facilitar o uso destas funções e variáveis,
mas não devemos abusar
19Static Imports
double r Math.cos(Math.PI theta)
import static java.lang.Math. // import static java.lang.Math.PI // import static java.lang.Math.cos double r cos(PI theta)
20Annotations (Metadata)
- JSR-175
- Permite que você defina e use seus próprios tipos
de anotação - Podem ser acessadas via reflexão
- Não alteram a semântica do programa, mas pode
afetar como o programa é tratado por ferramentas
e bibliotecas - Programadores típicos nunca precisarão definir um
tipo Annotation
21Argumentos Variáveis
- JSR-65
- Permite a definição de métodos com número de
argumentos variáveis - Elimina a necessidade de empacotar listas em um
array - Só poder ser utilizado como última variável em um
método
22Argumentos Variáveis
public class Teste public void imprimir(Object ... objetos) for(Object objeto objetos) System.out.println(objeto) public static void main(String args) imprimir(string, new Teste(), 50, 3.2)
23Leituras e escritas formatadas
- JSR-51
- Facilidades para leitura e escrita de textos
formatados - Leitura Scanner, evolução do StringTokenizer
- Escrita printf em Java
24Leituras e escritas formatadas
int age 28 String name Williamis System.out.printf("s d", name, age)
Scanner reader new Scanner(System.in) int n reader.nextInt()
25Outras Novidades...
- Utilitário para programação concorrente
- RMI não necessita mais do rmic
- Algumas adições na API JDBC
- Muitas melhorias no desempenho
http//java.sun.com/performance/reference/whitepap
ers/5.0_performance.html - StringBuilder e StringBuffer
26Java 5 - Novidades
- Gerente de Tecnologia Vitor Costa