Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wieso enum Declaration nur außerhalb einer Methode möglich?
wieso kann ich enums zwar als "field" in einer Methode declarieren, aber nicht in einer Methode der Klasse?
D.h. wieso geht
Code:
public class test {
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Day d;
d = Day.MONDAY;
}
}
aber nicht
Code:
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
Day d;
d = Day.MONDAY;
}
}
public static void main(String args[])
throws Exception
{
class X
{
static int y = 0;
}
X x = new X();
}
geht auch nicht
so richtig schlüssig ist das sicher auch nicht,
letztlich kann ich dir nur sagen, dass es nicht geht, was du eh schon weißt
muss noch jemand anders erklären
>Nested enum types are implicitly static.
Hmm, die Elemente der Aufzählung sind doch statisch, d.h. bei
enum Day { Monday, Tuesday} werden zwei statische Variablen der Klasse Day angelegt (Monday und Tuesday). Ich habe noch nicht verstanden warum enum selbst dann auch statisch ist... Wäre prima, wenn ihr das nochmal erklärt.
Weil Enums intern als Klassen mit gewissem Aufbau definiert sind.
Heißt: Der Java Compiler macht beim Kompilieren eine gewöhnliche statische Java-Class daraus (kann man schön an den erstellten Classfiles sehen) und Klassen kannst du auch nicht in Methoden definieren weil die damit nicht für den Classloader sichtbar wären der für das Laden der Klassen zuständig ist. Dazu müsste das gesammte Sicherheitssystem auf dem Java basiert verändert werden.
In Java gibt es laut language specification genau 2 Arten Klassen:
Interface und Class
Und Enums sind halt fest definierte Class Objekte die sich von der Enum-Class ableiten und dadurch gewisse Funktionen und Interfaces besitzen, z.b. die ordinal oder name Funktion.
und Klassen kannst du auch nicht in Methoden definieren weil die damit nicht für den Classloader sichtbar wären der für das Laden der Klassen zuständig ist. Dazu müsste das gesammte Sicherheitssystem auf dem Java basiert verändert werden.
Das stimmt schonmal nicht. Man kann Klassen innerhalb von Methoden definieren, sogenannte lokale Klassen.
Noctarius hat gesagt.:
In Java gibt es laut language specification genau 2 Arten Klassen:
Interface und Class
Und Enums sind halt fest definierte Class Objekte die sich von der Enum-Class ableiten und dadurch gewisse Funktionen und Interfaces besitzen, z.b. die ordinal oder name Funktion.
Ich würde sagen: das ist halt so. Enums besitzen statische Methoden. Innere Klassen dürfen keine eigenen statischen Methoden definieren. Es wäre zwar theoretisch möglich, aber die JLS verbietet es.