Novidades do Java 7 – Simplified Varargs Method Invocation

Simplified Varargs Method Invocation

Esta talvez seja a atualização mais complicada de se entender. Na verdade nada será alterado em relação ao código, como as anteriores, mas sim em relação a interpretação do compilador em um caso especifico que em versões anteriores geravam mensagens de aviso (warning).

Em Java arrays e tipos genéricos não se relacionam muito bem, veja o seguinte exemplo no código abaixo. Este código quando compilado irá gerar a um Warning parecido com este “Note: HelloJava7Varargs.java uses unchecked or unsafe operations.”. Porém não existe nada de errado no código, ele compila e executa sem problemas, mas lança essa mensagem de aviso.

Arrays e Generics

import java.util.*;

public class HelloJava7Varargs {
    public static void main(String[] args) {
        Set<Integer> aSet = new HashSet<Integer>();

        List<Set<Integer>> listOfSets = Arrays.asList(aSet);
    }


Na verdade, o que acontece é que antes de o compilador gerar o bytecode é feita uma conversão no programa que modifica a linha 7, que internamente passa a valer:

List<Set<Integer>> listOfSets = Arrays.asList(new Set[]{aSet});

Note que nessa conversão o Set usado para construir o array não contém mais a informação de tipo (em Java não é permitida a criação de um array usando generics) o que provoca o warning. Uma forma de evitar esse warning é incluindo a anotação @SuppressWarnings(“unchecked”) no método, ou na linha imediatamente antes daquela onde o compilador indicou o warning.

Incluindo anotação @SuppressWarnings – Java 5/6

import java.util.*;

public class HelloJava7Varargs {
@SuppressWarnings({“unchecked”})
public static void main(String[] args) {
Set<Integer> aSet = new HashSet<Integer>();

List<Set<Integer>> listOfSets = Arrays.asList(aSet);
}
}

No Java 7 esse problema foi solucionado e códigos compilados na nova versão não terão a mensagem de warning exibida sem a necessidade de usar a anotação @SuppressWarnings(“unchecked”).

 

Fonte: Novidades do Java 7 « Programando com Java.

Sobre perini

José Carlos Perini publicou 49 posts no seu blog.

Professor universitário Faculdade Metrocamp e People Computação Oracle Certified Professional, Java SE 6 Programmer

You can leave a response, or trackback from your own site.

Leave a Reply