java 5 - novidades

26
Java 5 - Novidades Gerente de Tecnologia – Vitor Costa

Upload: xanti

Post on 04-Jan-2016

43 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java 5 - Novidades

Java 5 - Novidades

Gerente de Tecnologia – Vitor Costa

Page 2: Java 5 - Novidades

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...

Page 3: Java 5 - Novidades

Tipos Genéricos

JSR-14; Sintaxe mais limpa – evita casts; Verificação em tempo de compilação; Equivalente ao Template em C++, será?

Page 4: Java 5 - Novidades

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();

Page 5: Java 5 - Novidades

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) { }}

Page 6: Java 5 - Novidades

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;

Page 7: Java 5 - Novidades

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 );

Page 8: Java 5 - Novidades

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”);

}

Page 9: Java 5 - Novidades

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;

Page 10: Java 5 - Novidades

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;}

Page 11: Java 5 - Novidades

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);

}

Page 12: Java 5 - Novidades

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>;

Page 13: Java 5 - Novidades

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;

Page 14: Java 5 - Novidades

Covariância

public class SuperClasse {public JTextField getCampoTexto() {

return new JTextField();}

}

public class SubClasse extends SuperClasse {public JPasswordField getCampoTexto() {

return new JPasswordField();}

}

Page 15: Java 5 - Novidades

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;

Page 16: Java 5 - Novidades

Tipos Enumerados

public enum Semaforo { VERMELHO, AMARELO, VERDE

};

/* ... */

Semaforo semaforo = Semaforo.VERDE;if(semaforo == Semaforo.VERMELHO) { }

switch(semaforo) {case(Semaforo.VERDE):// ...

}

Page 17: Java 5 - Novidades

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); }}

Page 18: Java 5 - Novidades

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;

Page 19: Java 5 - Novidades

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);

Page 20: Java 5 - Novidades

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;

Page 21: Java 5 - Novidades

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;

Page 22: Java 5 - Novidades

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);

}}

Page 23: Java 5 - Novidades

Leituras e escritas formatadas JSR-51; Facilidades para leitura e escrita de textos

formatados; Leitura: Scanner, evolução do StringTokenizer; Escrita: printf em Java;

Page 24: Java 5 - Novidades

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();

Page 25: Java 5 - Novidades

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;

Page 26: Java 5 - Novidades

Java 5 - Novidades

Gerente de Tecnologia – Vitor Costa