Java 7: Novo recurso (Diamond) já disponível no build 72

4 respostas
E

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6840638

Como vocês devem saber, no Java 7, em vez de escrevermos:

Map <String, List <String> > multimap = new HashMap < String, List < String > > ();

poderemos escrever algo muito mais simples:

Map <String, List<String> > multimap = new HashMap <> ();

O que é muito mais fácil de entender, mais simples e menos sujeito a erros do tipo “copy & paste”.

Exemplo de código tirado do próprio JDK (são classes de teste).

public class Pos01<X> {

    Pos01(X x) {}

    <Z> Pos01(X x, Z z) {}

    void test() {
        Pos01<Integer> p1 = new Pos01 < > (1); //new Foo<Integer> created
        Pos01<? extends Integer> p2 = new Pos01 < > (1); //new Foo<Integer> created
        Pos01<?> p3 = new Pos01 < > (1); //new Foo<Object> created
        Pos01<? super Integer> p4 = new Pos01 < > (1); //new Foo<Object> created

        Pos01<Integer> p5 = new Pos01 < > (1){}; //new Foo<Integer> created
        Pos01<? extends Integer> p6 = new Pos01 < > (1){}; //new Foo<Integer> created
        Pos01<?> p7 = new Pos01 < > (1){}; //new Foo<Object> created
        Pos01<? super Integer> p8 = new Pos01 < > (1){}; //new Foo<Object> created

        Pos01<Integer> p9 = new Pos01 < > (1, ""); //new Foo<Integer> created
        Pos01<? extends Integer> p10 = new Pos01 < > (1, ""); //new Foo<Integer> created
        Pos01<?> p11 = new Pos01 < > (1, ""); //new Foo<Object> created
        Pos01<? super Integer> p12 = new Pos01 < > (1, ""); //new Foo<Object> created

        Pos01<Integer> p13 = new Pos01 < > (1, ""){}; //new Foo<Integer> created
        Pos01<? extends Integer> p14= new Pos01 < > (1, ""){}; //new Foo<Integer> created
        Pos01<?> p15 = new Pos01 < > (1, ""){}; //new Foo<Object> created
        Pos01<? super Integer> p16 = new Pos01 < > (1, ""){}; //new Foo<Object> created
    }

    public static void main(String[] args) {
        Pos01<String> p1 = new Pos01 < > ("");
        p1.test();
    }
} 

public class Pos02 {

    static class Foo<X> {
        Foo(X x) {}
        <Z> Foo(X x, Z z) {}
    }

    void testSimple() {
        Foo<Integer> f1 = new Foo < > (1); //new Foo<Integer> created
        Foo<? extends Integer> f2 = new Foo < > (1); //new Foo<Integer> created
        Foo<?> f3 = new Foo < > (1); //new Foo<Object> created
        Foo<? super Integer> f4 = new Foo < > (1); //new Foo<Object> created

        Foo<Integer> f5 = new Foo < > (1){}; //new Foo<Integer> created
        Foo<? extends Integer> f6 = new Foo < > (1){}; //new Foo<Integer> created
        Foo<?> f7 = new Foo < > (1){}; //new Foo<Object> created
        Foo<? super Integer> f8 = new Foo < > (1){}; //new Foo<Object> created

        Foo<Integer> f9 = new Foo < > (1, ""); //new Foo<Integer> created
        Foo<? extends Integer> f10 = new Foo < > (1, ""); //new Foo<Integer> created
        Foo<?> f11 = new Foo < > (1, ""); //new Foo<Object> created
        Foo<? super Integer> f12 = new Foo < > (1, ""); //new Foo<Object> created

        Foo<Integer> f13 = new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<? extends Integer> f14 = new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<?> f15 = new Foo < > (1, ""){}; //new Foo<Object> created
        Foo<? super Integer> f16 = new Foo < > (1, ""){}; //new Foo<Object> created
    }

    void testQualified() {
        Foo<Integer> f1 = new Pos02.Foo < > (1); //new Foo<Integer> created
        Foo<? extends Integer> f2 = new Pos02.Foo < > (1); //new Foo<Integer> created
        Foo<?> f3 = new Pos02.Foo < > (1); //new Foo<Object> created
        Foo<? super Integer> f4 = new Pos02.Foo < > (1); //new Foo<Object> created

        Foo<Integer> f5 = new Pos02.Foo < > (1){}; //new Foo<Integer> created
        Foo<? extends Integer> f6 = new Pos02.Foo < > (1){}; //new Foo<Integer> created
        Foo<?> f7 = new Pos02.Foo < > (1){}; //new Foo<Object> created
        Foo<? super Integer> f8 = new Pos02.Foo < > (1){}; //new Foo<Object> created

        Foo<Integer> f9 = new Pos02.Foo < > (1, ""); //new Foo<Integer> created
        Foo<? extends Integer> f10 = new Pos02.Foo < > (1, ""); //new Foo<Integer> created
        Foo<?> f11 = new Pos02.Foo < > (1, ""); //new Foo<Object> created
        Foo<? super Integer> f12 = new Pos02.Foo < > (1, ""); //new Foo<Object> created

        Foo<Integer> f13 = new Pos02.Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<? extends Integer> f14 = new Pos02.Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<?> f15 = new Pos02.Foo < > (1, ""){}; //new Foo<Object> created
        Foo<? super Integer> f16 = new Pos02.Foo < > (1, ""){}; //new Foo<Object> created
    }

    public static void main(String[] args) {
        Pos02 p2 = new Pos02();
        p2.testSimple();
        p2.testQualified();
    }
} 
public class Pos03<U> {

    class Foo<V> {
        Foo(V x) {}
        <Z> Foo(V x, Z z) {}
    }

    void testSimple() {
        Foo<Integer> f1 = new Foo < > (1); //new Foo<Integer> created
        Foo<? extends Integer> f2 = new Foo < > (1); //new Foo<Integer> created
        Foo<?> f3 = new Foo < > (1); //new Foo<Object> created
        Foo<? super Integer> f4 = new Foo < > (1); //new Foo<Object> created

        Foo<Integer> f5 = new Foo < > (1){}; //new Foo<Integer> created
        Foo<? extends Integer> f6 = new Foo < > (1){}; //new Foo<Integer> created
        Foo<?> f7 = new Foo < > (1){}; //new Foo<Object> created
        Foo<? super Integer> f8 = new Foo < > (1){}; //new Foo<Object> created

        Foo<Integer> f9 = new Foo < > (1, ""); //new Foo<Integer> created
        Foo<? extends Integer> f10 = new Foo < > (1, ""); //new Foo<Integer> created
        Foo<?> f11 = new Foo < > (1, ""); //new Foo<Object> created
        Foo<? super Integer> f12 = new Foo < > (1, ""); //new Foo<Object> created

        Foo<Integer> f13 = new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<? extends Integer> f14 = new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<?> f15 = new Foo < > (1, ""){}; //new Foo<Object> created
        Foo<? super Integer> f16 = new Foo < > (1, ""){}; //new Foo<Object> created
    }

    void testQualified_1() {
        Foo<Integer> f1 = new Pos03<U>.Foo < > (1); //new Foo<Integer> created
        Foo<? extends Integer> f2 = new Pos03<U>.Foo < > (1); //new Foo<Integer> created
        Foo<?> f3 = new Pos03<U>.Foo < > (1); //new Foo<Object> created
        Foo<? super Integer> f4 = new Pos03<U>.Foo < > (1); //new Foo<Object> created

        Foo<Integer> f5 = new Pos03<U>.Foo < > (1){}; //new Foo<Integer> created
        Foo<? extends Integer> f6 = new Pos03<U>.Foo < > (1){}; //new Foo<Integer> created
        Foo<?> f7 = new Pos03<U>.Foo < > (1){}; //new Foo<Object> created
        Foo<? super Integer> f8 = new Pos03<U>.Foo < > (1){}; //new Foo<Object> created

        Foo<Integer> f9 = new Pos03<U>.Foo < > (1, ""); //new Foo<Integer> created
        Foo<? extends Integer> f10 = new Pos03<U>.Foo < > (1, ""); //new Foo<Integer> created
        Foo<?> f11 = new Pos03<U>.Foo < > (1, ""); //new Foo<Object> created
        Foo<? super Integer> f12 = new Pos03<U>.Foo < > (1, ""); //new Foo<Object> created

        Foo<Integer> f13 = new Pos03<U>.Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<? extends Integer> f14 = new Pos03<U>.Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<?> f15 = new Pos03<U>.Foo < > (1, ""){}; //new Foo<Object> created
        Foo<? super Integer> f16 = new Pos03<U>.Foo < > (1, ""){}; //new Foo<Object> created
    }

    void testQualified_2(Pos03<U> p) {
        Foo<Integer> f1 = p.new Foo < > (1); //new Foo<Integer> created
        Foo<? extends Integer> f2 = p.new Foo < > (1); //new Foo<Integer> created
        Foo<?> f3 = p.new Foo < > (1); //new Foo<Object> created
        Foo<? super Integer> f4 = p.new Foo < > (1); //new Foo<Object> created

        Foo<Integer> f5 = p.new Foo < > (1){}; //new Foo<Integer> created
        Foo<? extends Integer> f6 = p.new Foo < > (1){}; //new Foo<Integer> created
        Foo<?> f7 = p.new Foo < > (1){}; //new Foo<Object> created
        Foo<? super Integer> f8 = p.new Foo < > (1){}; //new Foo<Object> created

        Foo<Integer> f9 = p.new Foo < > (1, ""); //new Foo<Integer> created
        Foo<? extends Integer> f10 = p.new Foo < > (1, ""); //new Foo<Integer> created
        Foo<?> f11 = p.new Foo < > (1, ""); //new Foo<Object> created
        Foo<? super Integer> f12 = p.new Foo < > (1, ""); //new Foo<Object> created

        Foo<Integer> f13 = p.new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<? extends Integer> f14 = p.new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<?> f15 = p.new Foo < > (1, ""){}; //new Foo<Object> created
        Foo<? super Integer> f16 = p.new Foo < > (1, ""){}; //new Foo<Object> created
    }

    public static void main(String[] args) {
        Pos03<String> p3 = new Pos03 < > ();
        p3.testSimple();
        p3.testQualified_1();
        p3.testQualified_2(p3);
    }
} 
public class Pos04<U> {

    void test() {
        class Foo<V> {
            Foo(V x) {}
            <Z> Foo(V x, Z z) {}
        }
        Foo<Integer> p1 = new Foo < > (1); //new Foo<Integer> created
        Foo<? extends Integer> p2 = new Foo < > (1); //new Foo<Integer> created
        Foo<?> p3 = new Foo < > (1); //new Foo<Object> created
        Foo<? super Integer> p4 = new Foo < > (1); //new Foo<Object> created

        Foo<Integer> p5 = new Foo < > (1){}; //new Foo<Integer> created
        Foo<? extends Integer> p6 = new Foo < > (1){}; //new Foo<Integer> created
        Foo<?> p7 = new Foo < > (1){}; //new Foo<Object> created
        Foo<? super Integer> p8 = new Foo < > (1){}; //new Foo<Object> created

        Foo<Integer> p9 = new Foo < > (1, ""); //new Foo<Integer> created
        Foo<? extends Integer> p10 = new Foo < > (1, ""); //new Foo<Integer> created
        Foo<?> p11 = new Foo < > (1, ""); //new Foo<Object> created
        Foo<? super Integer> p12 = new Foo < > (1, ""); //new Foo<Object> created

        Foo<Integer> p13 = new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<? extends Integer> p14 = new Foo < > (1, ""){}; //new Foo<Integer> created
        Foo<?> p15 = new Foo < > (1, ""){}; //new Foo<Object> created
        Foo<? super Integer> p16 = new Foo < > (1, ""){}; //new Foo<Object> created
    }

    public static void main(String[] args) {
        Pos04<String> p4 = new Pos04 < > ();
        p4.test();
    }
}

4 Respostas

mchiareli

eu pensei que seria:

Map<String, List<String>> multimap = new HashMap();

mas pelos exemplos vc ainda precisa manter “<>”, não vejo muita vantagem nisso, java está cada dia mais chato…Oo

E

mchiareli:
eu pensei que seria:

Map<String, List<String>> multimap = new HashMap();

mas pelos exemplos vc ainda precisa manter “<>”, não vejo muita vantagem nisso, java está cada dia mais chato…Oo

Semanticamente Map<…> = new HashMap<>() é diferente de Map<…> = new HashMap() (sem o <>).

E não é que “java está ficando cada dia mais chato”. Está cada vez ficando mais complicado? Concordo. Mas ainda há muitas coisas interessantes para se aprender no Java.

mchiareli

enantiomero:
mchiareli:
eu pensei que seria:

Map<String, List<String>> multimap = new HashMap();

mas pelos exemplos vc ainda precisa manter “<>”, não vejo muita vantagem nisso, java está cada dia mais chato…Oo

Semanticamente Map<…> = new HashMap<>() é diferente de Map<…> = new HashMap() (sem o <>).

E não é que “java está ficando cada dia mais chato”. Está cada vez ficando mais complicado? Concordo. Mas ainda há muitas coisas interessantes para se aprender no Java.

Sim, claro que tem.

Eu gosto muito de java, mas ele evolui muito pouco, olha o c# como evolui muito, mas muito frente ao java, claro que isso traz quebra de compatibilidade, mas talvez isso seja necessario também, as vezes eu gostaria que o java nao tivesse compatibilidade e facilitasse mais a minha vida.

Depois que vc usa ruby/groovy/python, o java se torna realmente muito chato… mas ainda é minha linguagem preferida…rsrs

Hellmanss

http://www.guj.com.br/posts/list/136626.java

Criado 18 de setembro de 2009
Ultima resposta 18 de set. de 2009
Respostas 4
Participantes 3