Explizite Klassenreferenz während der statischen Initialisierung nicht zulässig. Warum?Java

Java-Forum
Anonymous
 Explizite Klassenreferenz während der statischen Initialisierung nicht zulässig. Warum?

Post by Anonymous »

Hinweis. Ich hoffe, dass „Warum“-Fragen tatsächlich in die Kategorie „Andere“ fallen.
Das wird kompiliert.

Code: Select all

class MyClass {

private static final String STRING;

static {
STRING = "abc";
}
}
Das ist nicht der Fall.

Code: Select all

class MyClass {

private static final String STRING;

static {
MyClass.STRING = "abc";
}
}

Code: Select all

MyClass.java:8: error: cannot assign a value to final variable string
MyClass.string = "abc";
^
1 error
Warum? War es eine bewusste Designentscheidung? Ich könnte mir vorstellen, dass beide Snippets in denselben Bytecode kompiliert werden sollten (ähnlich wie nonstaticMethod() und this.nonstaticMethod()). javac kann einen Initialisierer von einer einfachen Methode unterscheiden, daher sollte es keine Probleme haben, die Zuweisung im letzteren Snippet als Initialisierung zu erkennen.
Hat es etwas mit Klassenladern zu tun? Von verschiedenen Ladeprogrammen geladene Klassen können denselben vollqualifizierten Namen haben.
Java 8.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post