click below
click below
Normal Size Small Size show me how
Java 8
Novas Inferências de tipo
| Conceito | Código |
|---|---|
| Na linguagem Java devemos declarar os tipos das variáveis obrigatoriamente. Em Java declaramos o tipo da variável e somente podemos atribuir valores deste tipo. | // Não compila por falta de inf. do tipo. public class InferenciaDeTipo { public static void main(String[] args){ int valor1 = 10; String valor2 = "Valor"; naoPermitido = 42; } } |
| Melhoras na inferência dos tipos genéricos | // Java 7 foo(Utility.<Type>bar()); Utility.<Type>foo().bar(); // Java 8 foo(Utility.bar()); Utility.foo().bar(); |
| Pode-se substituir os argumentos que necessitam da declaração de tipo para chamar o construtor de uma classe genérica com um conjunto vazio de parâmetros de tipo ( <> ). Este par de colchetes é informalmente chamado diamante. | // Considere a seguinte declaração: Map<String, List<String>> myMap = new HashMap<String, List<String>>(); //Pode-se substituir por tipo parametrizado com o construtor diamante: Map <String, List <String>> myMap = new HashMap <> (); |
| Tipos de Destino: O tipo de destino de uma expressão é o tipo de dados que o compilador Java espera, dependendo de onde a expressão aparece. | //Java 7 // construtor do método vazio processStringList (List <String> stringlist) //chama o método processStringList (Collections. <String> emptyList ()); //Java 8 // chama o método processStringList (Collections.emptyList ()); |
| A inferência de tipos, introduzida no Java 7, também é aplicada às expressões lambda. | //Exemplo de uso em expressão Lambda List<String> list = Arrays.asList(...); Collections.sort(list, (s1, s2) -> s1.length() - s2.length()); //Os tipos dos parâmetros s1 e s2 foram omitidos, o compilador sabe que a lista contém uma coleção de Strings |
| Inferência de tipos também se aplica à Funções de Ordem superior | //A implementação é elegante e bem sucinta. Note que faz uso da inferência de tipos: o parâmetro p do tipo Photo não é explicitamente definido. List<Photo> photos = Arrays.asList(...) List<Photo> output = photos.filter(p -> p.getSizeInKb() < 10) |