Depois de ler isso no StackOverflow fiquei surpreso com algumas coisas.
Mas a quem mais me surpreendeu (não li todas) foi apertar Ctrl + Shift + F1 em algum programa Swing, depois da uma olhada no Console.
Se você fizer simplesmente throw null de dentro de um código é compilado e lançado um NullPointer quando executado naquele ponto.
O seguinte código que não é bem uma hidden feature mas é bem util pra quem não sabe
Map map = new HashMap() {{
put("a key", "a value");
put("another key", "another value");
}};
O que acontece é que voce esta criando uma class que extende HashMap e criando um bloco de codigo que vai ser executado nele.
È possivel juntar tipos no Generics
public class Baz<T extends Foo & Bar> {}
Dai só vai aceitar um parametro que seja Foo e Bar ao mesmo tempo.
Tem essa classe http://www.docjar.com/html/api/ClassLib/Common/sun/misc/Unsafe.java.html com ela
Mas o uso incorreto dessa classe pode matar a JVM.
new URL("http://www.yahoo.com").equals(new URL("http://209.191.93.52"))
Isso retorna true.
Alguém sabe mais alguma?
Sinceramente, não vi utilidade alguma no exemplo do mapa.
Vc gasta a mesma quantidade de linhas caso fosse fazer da forma tradicional, define mais uma classe sem haver necessidade, além de tornar o código difícil de ler.
Tah, se for usar como parâmetro para um método pode até ser útil.
Os genéricos tem muitas coisas que a gente não aprende normalmente. Dá uma olhadinha no livro “Java Generics and Collections”.
Olhe um exemplo tirado do livro citado:
[code]class Lists {
public static List toList(T… arr) {
List list = new ArrayList();
for (T elt : arr)
list.add(elt);
return list;
}
}
// inferência do tipo
List ints1 = Lists.toList(1, 2, 3);
// tipo definido explicitamente
List ints2 = Lists.toList(1, 2, 3);
// veja a saida do compilador para isso
List ints3 = Lists.toList(1, 2, 3, “”);
// e para isso
List ints4 = Lists.toList(1, 2, 3, “”);[/code]
Tem certeza que seu exemplo de URL retorna true?
Esse exemplo aqui retorna true:
new URL("http://www.guj.com.br").equals(new URL("http://208.109.100.149") )
Afinal, 208.109.100.149 é o IP apontado pelo endereço www.guj.com.br.
[]'s
Acho que o exemplo do mapa pode ser interessante se for um mapa estático para a classe:
private final static Map estadosPorRegiao = new HashMap() {{
put("sudeste", "São Paulo", "Rio de Janeiro");
put("sul", "Santa Catarina", "Rio Grande do Sul");
}};
Para adicionar, esse link aqui tem uma série de dicas interessantes.
o ruim do Unsafe é ser so Sun tambem. O pessoal do XStream e do Objenesis encapsulam isso para voce poder fazer essas magicas em qualquer JVM.
O do mapa é comum encontrar em codigo por ai.
E o da URL é um classico aviso, pra gente tomar cuidado com a velocidade de URLs dentro de Sets e como chaves em Maps, ou contains em qualquer collection.
nao conhecia o truque do swing.
É… pra falar a verdade esses são só exemplos incomuns.
Mas o do Swing realmente me chamou a atenção.
Alias, eu descobri algo hoje sem querer.
Pode-se adicionar qualquer modificador antes de package que funciona.
Isso compila:
private protected public final static private protected package com.view.popup;
public class MyClass{
//
}