Java 5 - Novidades
description
Transcript of Java 5 - Novidades
Java 5 - Novidades
Gerente de Tecnologia – Vitor Costa
Novidades
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...
Tipos Genéricos
JSR-14; Sintaxe mais limpa – evita casts; Verificação em tempo de compilação; Equivalente ao Template em C++, será?
Tipos Genéricos
Antes:
Agora:
List lista = new ArrayList();lista.add( new Integer( 100 ) );int numero = ( (Integer) lista.get( 0 ) ).intValue();
List<Integer> lista = new ArrayList<Integer>();lista.add( new Integer( 100 ) );int numero = lista.get( 0 ).intValue();
Construindo Tipos Genéricos
public interface Pilha<E> {E pop();void push(E objeto);
}
public class UtilPilha {public static void limpar(Pilha<?> pilha) { }public static void imprimir
(Pilha<? extends Desenho> pilha) { }}
Autoboxing/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;
Autoboxing/unboxing
Antes:
Agora:
List lista = new ArrayList();lista.add( new Integer( 100 ) );int numero = lista.get( 0 ).intValue();
List<Integer> lista = new ArrayList<Integer>();lista.add( 100 );int numero = lista.get( 0 );
Autoboxing/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”);
}
Enhanced 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;
Enhanced for Loop - array
Antes:
Agora:
int sum = 0;for(int i = 0; i < array.length; i++) {
sum += array[i];}
int sum = 0;for(int i : array) {
sum += i;}
Enhanced for Loop - coleção
Antes:
Agora:
for(Iterator i = c.iterator(); i.hasNext(); ) {String str = (String) i.next();sb.append(str);
}
for(String str : c) {sb.append(str);
}
Enhanced 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.Iterable<E>;
Covariâ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;
Covariância
public class SuperClasse {public JTextField getCampoTexto() {
return new JTextField();}
}
public class SubClasse extends SuperClasse {public JPasswordField getCampoTexto() {
return new JPasswordField();}
}
Tipos 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;
Tipos Enumerados
public enum Semaforo { VERMELHO, AMARELO, VERDE
};
/* ... */
Semaforo semaforo = Semaforo.VERDE;if(semaforo == Semaforo.VERMELHO) { }
switch(semaforo) {case(Semaforo.VERDE):// ...
}
Tipos Enumerados
public enum Planet { MERCURY (3.303e+23, 2.4397e6), VENUS (4.869e+24, 6.0518e6), PLUTO (1.27e+22, 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); }}
Static 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;
Static Imports
Antes:
Agora:
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);
Annotations (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;
Argumentos 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;
Argumentos 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);
}}
Leituras e escritas formatadas JSR-51; Facilidades para leitura e escrita de textos
formatados; Leitura: Scanner, evolução do StringTokenizer; Escrita: printf em Java;
Leituras e escritas formatadas Escrita:
Leitura:
int age = 28;String name = “Williamis”;System.out.printf("%s %d", name, age);
Scanner reader = new Scanner(System.in);int n = reader.nextInt();
Outras 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/whitepapers/5.0_performance.html
StringBuilder e StringBuffer;
Java 5 - Novidades
Gerente de Tecnologia – Vitor Costa