Na HackeNews pojawił się "news" o ukrytych ficzerach Java'y, który prowadzi do StackOverflow (http://stackoverflow.com/questions/15496/hidden-features-of-java).
Najbardziej mi się poodoba Double Brace Initialization ;-)
Najpierw nie rozumiałem o co chodzi, ale jak spojrzałem dokładniej na kod to jest to banalnie proste i genialne ;-)
Np. gdy chcemy stworzyć statyczną listę z 2 wartościami, to zwykle robi się to tak (pomińmy to co trzeba zrobić w większości przypadków czyli użycie niemodyfikowalnej listy):
Z użyciem double brace initlialization będzie:
;-)
A co robi ten kod? ;-)
Po prostu deklarujemy tam klasę anonimową i dodajemy jej sekcję, która będzie wywoływana w trakcie konstrukcji instancji :-) [jeszcze przed konstruktorem domyślnym :-)]
Człowieka gdy na to patrzy czaruje to {{ i }}, ale tak naprawdę ten kod można zobaczyć tak:
I wtedy nagle staje się czytelniejszy :-)
Chytre to :-)
Najbardziej mi się poodoba Double Brace Initialization ;-)
Najpierw nie rozumiałem o co chodzi, ale jak spojrzałem dokładniej na kod to jest to banalnie proste i genialne ;-)
Np. gdy chcemy stworzyć statyczną listę z 2 wartościami, to zwykle robi się to tak (pomińmy to co trzeba zrobić w większości przypadków czyli użycie niemodyfikowalnej listy):
public final static List<String> YES_NO = new ArrayList<String>();
static {
YES_NO.add("Yes");
YES_NO.add("No");
}
Z użyciem double brace initlialization będzie:
public final static List<String> YES_NO = new ArrayList<String>() {{
add("Yes");
add("No");
}}
;-)
A co robi ten kod? ;-)
Po prostu deklarujemy tam klasę anonimową i dodajemy jej sekcję, która będzie wywoływana w trakcie konstrukcji instancji :-) [jeszcze przed konstruktorem domyślnym :-)]
Człowieka gdy na to patrzy czaruje to {{ i }}, ale tak naprawdę ten kod można zobaczyć tak:
public final static List<String> YES_NO = new ArrayList<String>() {
{
add("Yes");
add("No");
}
}
I wtedy nagle staje się czytelniejszy :-)
Chytre to :-)
Podobne postybeta
Giń konstruktorze! Giń! ;-)
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)
Klasa statyczna - ki diabeł?;-)
Lubię enumy
Projekt Yes part 2 ;-)
to się nazywa dynamic initializer (nazywane double brace... przez newbies), było w javie od zawsze i nie jest żadnym trickem.
OdpowiedzUsuń