Warum erlaubt Java keine statischen Deklarationen mit einem statischen Initialisierungsblock in einer nicht statischen inneren Klasse?Warum können Sie einen Initialisierungsblock für eine statische Variable in einer inneren Klasse nicht verwenden?
im folgenden Code wird Outer2 funktionieren und Inner2 wird nicht, trotz der gleichen Sache. irgendwelche Ideen? Ich bin nicht auf der Suche nach einem Workaround, ich versuche nur zu verstehen, warum Java dies nicht tut.
public class WhyUNoStatic {
public static final String outer1 = "snth"; // ok
public static final String outer2; // ok
static
{
outer2 = "snth";
}
public class Inner {
public static final String inner1 = "snth"; // still ok!
public static final String inner2; // FAILURE TIME
static
{
inner2 = "snth";
}
}
}
edit: beachten Sie, dass inner1
gut funktionieren wird. Es ist nicht so, dass Java statische Vars in inneren Klassen verbietet, es verbietet nur deren Deklarationen.
Da innere Klassen nicht 'static' nicht final Mitglieder haben kann, und' static {} 'ist ein statisches Element. Könnte sein? –
Java verbietet nicht konstante Variablen in inneren Klassen. 'inner1 'ist eine konstante Variable. 'inner2' ist nicht. –