statisches Feld in lokaler Klasse. Sinnlos!

Status
Nicht offen für weitere Antworten.

Wladimir

Mitglied
habe eine lokale Klasse
Code:
class PersonPanel
{
 ...
 private void createPanel ()
 {
  ...
  // lokale Klasse
  Action action = new Action ("Submit") {
   private static String name = "ActionCode123";
   ...
  }
  ...
  button = myFactor.createButton (action);
  ...
 }
...
}

Nun meine Frage.
Sind meine Gedanken richtig?

1) Static ist nicht nötig, da es nie eine zweite Instanz einer lokalen Klasse geben kann.
2) Kann es wirklich nie eine 2te Instanz einer lokalen Klasse geben?
3) Wenn ich eine 2te PersonPanel Instanz habe, ist action dann nicht die 2te Instanz des selbten Typs "Action ("Submit")"?

Ich nehme an lokale Klassen sind für jede Instanz der umschliessenden Klasse eindeutig.
Somit macht static in lokalen Klassen keinen Sinn.
 

Marco13

Top Contributor
Und um nicht ZU viel Unfug zu erzählen hab ich gerade mal versucht, sowas zu compilieren, da sagt er mir
"inner classes cannot have static declarations"
... :roll:
Was soll es auch bringen, ein statisches Feld in einer (anonymen!!!) inneren Klasse zu haben. Man hat ja NIE Zugriff auf die Klasse, sondern IMMER nur auf die Instanzen....
 
S

SlaterB

Gast
man könnte mal
object.getClass().newInstance()
versuchen,
ist bestimmt verboten für anonyme Klassen
 

Wladimir

Mitglied
Code:
Action action = new Action ("Submit") {
   private final static String name = "ActionCode123";
   ...
  }

compiliert.

Das stimmt, "static" alleine kann in inneren Klasse nicht verwendet werden. Erst mit "final" ist es wiederum möglich.
Wieso aber dann "final static" erlaubt ist. Ist wohl alleine weil es überlich ist "final" mit "static" zu kombinieren.

Code:
object.getClass().newInstance()

liefert klarerweise eine InstationException[/code]
 
S

Spacerat

Gast
Hallo,

... und vorallem, was soll das mit private final? Auf dieses statische Feld (im übrigen genau wie die serialVersionUID) kann scheinbar wirklich nur die Anonyme Klasse zugreifen, da sie ja selbst in der umgebenden Klasse nicht mal namentlich bekannt ist! OK... Die Lösung für derartige Konstrukte findet man im JNI-Bereich (Java Native Interface) der JVM. Über JNI kann man jederzeit auf private oder protegierte Klassen-Member (Felder und Methoden transient oder statisch) ausserhalb der Klasse zugreifen. Wenn jemandem z.B. in Fremdcode eine "vergessene" private Methode über den Weg läuft (Eclipse zeigt dann eine Warnung), sollte diese erst dann "gekillt" werden, wenn sichergestellt ist, das keine native Library zu diesem Paket gehört!

Ach... und genau deswegen ist es keinesfalls SINNLOS!!!

cu Spacerat
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Statisches Array mit Methode initialisieren Allgemeine Java-Themen 4
kowa Statisches Allgemeine Java-Themen 11
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Statisches und dynamisches Binden? Allgemeine Java-Themen 2
T statisches String Array an Methode übergeben Allgemeine Java-Themen 5
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
T JSoup findet input Feld nicht?! Wie kann ich das Feld finden? Allgemeine Java-Themen 3
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
H Wie kann ich überprüfen ob das Feld noch frei ist? Allgemeine Java-Themen 5
M Erste Schritte empty checkbox Feld ausblenden Allgemeine Java-Themen 4
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
K 3Dimensionales Feld - NullPointerException Allgemeine Java-Themen 2
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
R [Android]Wie dynamischen Button-Feld erstellen? Allgemeine Java-Themen 3
C Serialisierung - Standardwert für nachträglich hinzugefügtes Feld Allgemeine Java-Themen 2
G Feld Validierung in Swing Programm Allgemeine Java-Themen 6
reibi Eigene exception mit feld "serialVersionUID" Allgemeine Java-Themen 3
G feld spiegeln bzw. 90° drehen Allgemeine Java-Themen 3
M Feld initialisieren, direkt oder Konstruktor Allgemeine Java-Themen 2
S Dynamisches Feld generieren. Allgemeine Java-Themen 10
G JTextField: Feld für Ausgabe von Meldungen Allgemeine Java-Themen 14
S Datei auf Server mit lokaler Datei vergleichen Allgemeine Java-Themen 4
E Konflikte bei lokaler Adresse/Port Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben