Statischer Initialisierer für eine innere Klasse?

8

Wie man statischen Initialisierer auf einer inneren Klasse wie folgt erlaubt:

%Vor%     
xybrek 10.02.2012, 09:11
quelle

3 Antworten

10

Von JLS 8.1.3 Inner Klassen und umschließenden Instanzen :

  

Innere Klassen können keine statischen Initialisierer (§8.7) oder Mitgliederschnittstellen deklarieren.

Was Sie vielleicht wollen, ist eine geschachtelte Klasse:

%Vor%     
yshavit 10.02.2012, 09:12
quelle
4

Sie müssen die Klasse InnerClass als statisch definieren. Aber danach wird es keine reguläre innere Klasse mehr sein.

    
Abimaran Kugathasan 10.02.2012 09:12
quelle
1

Wie bereits von @yshavit angegeben, können Sie keine statischen Initialisierer deklarieren, aber aus dem, was ich gefunden habe, können Sie das umgehen, indem Sie eine Methode deklarieren, um beliebige Initialisierungen durchzuführen, und sie einfach beim Definieren der Klassenfelder aufrufen. Zum Beispiel habe ich diesen Iterator implementiert (dies ist eine anonyme innere Klasse):

%Vor%

Das fühlt sich sehr hack-y an und ich frage mich, ob ich etwas vermisse, aber das funktioniert völlig und die Initialisierungsmethode wird nur einmal aufgerufen, genau wie ein statischer Initialisierungsblock ...

wäre     
kxirog 01.10.2015 18:20
quelle

Tags und Links