API - Beispiel + static member in inner (non static) class

diggaa1984

Top Contributor
Hallo auch,

ich bastel mir da grad was zusammen und bin bei der Api der PriorityBlockingQueue auf folgendes gestossen:

Operations on this class make no guarantees about the ordering of elements with equal priority. If you need to enforce an ordering, you can define custom classes or comparators that use a secondary key to break ties in primary priority values. For example, here is a class that applies first-in-first-out tie-breaking to comparable elements. To use it, you would insert a new FIFOEntry(anEntry) instead of a plain entry object.

Java:
class FIFOEntry<E extends Comparable<? super E>> implements Comparable<FIFOEntry<E>> {
    final static AtomicLong seq = new AtomicLong();
    final long seqNum;
    final E entry;
   
    public FIFOEntry(E entry) {
        seqNum = seq.getAndIncrement();
        this.entry = entry;
    }
   
    public E getEntry() { 
        return entry; 
    }
   
    public int compareTo(FIFOEntry<E> other) {
        int res = entry.compareTo(other.entry);

        if (res == 0 && other.entry != this.entry)
            res = (seqNum < other.seqNum ? -1 : 1);

        return res;
    }
}

ich benutzte das Beispiel 1:1 als innere private klasse.
eclipse sage mir dann aber "static field seq can not be declared static; static fields can only be declared in static or top-level types"

ja soweit klar, füg ich also einfach ein static in der klassendeklaration ein, aber was bitte bringt ein "private static class" denn!? Und warum ist die Api dahingehend fehlerhaft?
 
Zuletzt bearbeitet:

Ark

Top Contributor
ich benutzte das Beispiel 1:1 als innere private klasse.
eclipse sage mir dann aber "static field seq can not be declared static; static fields can only be declared in static or top-level types"

ja soweit klar, füg ich also einfach ein static in der klassendeklaration ein, aber was bitte bringt ein "private static class" denn!? Und warum ist die Api dahingehend fehlerhaft?
Das Beispiel aus der Dokumentation ist korrekt. Die dort beispielhaft vorgestellte Klasse ist nämlich ein "top-level type", und dort sind, wie die Fehlermeldung schon zum Ausdruck bringt, statische Felder erlaubt. Du hast das Beispiel aber als innere, nicht-statische Klasse wiederverwendet, deshalb der Fehler.

Ein "private static class" bringt vor allem eine Implementierung einer Schnittstelle oder eine Datenstruktur, die von der umgebenden Klasse benötigt wird.

Das [c]private[/c] garantiert, dass der Typ geheim (und nur für die umgebende Klasse zugänglich) bleibt.

Das [c]static[/c] garantiert, dass Instanzen dieser inneren Klasse nicht unmittelbar von der aktuellen Instanz der umgebenden Klasse abhängen können. Anders ausgedrückt: nicht-statische innere Klassen kennen neben ihrem eigenen [c]this[/c] auch das [c]this[/c] der umgebenden Klasse, sie nennen es [c]UmgebendeKlasse.this[/c]. (Statische innere Klassen kennen dagegen nur ihr eigenes [c]this[/c].)

Das "Problem" dabei, weshalb es zu dem Fehler kam: während das normale [c]this[/c] immer nur in objektgebundenen Methoden existiert, gibt es [c]UmgebendeKlasse.this[/c] praktisch immer und überall in der nicht-statischen inneren Klasse. Deswegen ist alles in einer solchen Klasse (insbesondere natürlich ihre Instanzen) immer an ein Objekt (nämlich [c]UmgebendeKlasse.this[/c]) gebunden und kann deshalb in keiner Weise (auch nicht nur zum Teil) irgendwie statisch sein.

Tipp: Mach alle inneren Klassen statisch, wenn möglich. Statische innere Klassen sind den "normalen" Klassen nämlich ähnlicher als ihre nicht-statischen Varianten. Vor allem [c]UmgebendeKlasse.this[/c] ist gerne mal ein Kandidat für Speicherlecks.

Beispiel: Du hast eine sehr große Instanz ("groß" bezogen auf den Speicherplatzverbrauch) einer Klasse. Weiterhin hat diese Klasse eine nicht-statische innere Klasse, von der du eine Instanz als Ergebnis irgendeiner Berechnung erzeugst und diese irgendwo nach draußen gibst (z.B., damit andere Objekte das Ergebnis haben). Das Problem hier: solange auch nur irgendein Objekt eine Referenz auf das Ergebnis dieser Berechnung hat, kann die besagte sehr große Instanz nicht gelöscht werden, weil diese nach wie vor vom Ergebnisobjekt referenziert wird, unabhängig davon, ob die sehr große Instanz für das Ergebnis notwendig ist oder nicht.

(Also zumindest denke ich, dass das so ist … :oops: )

Ark
 

diggaa1984

Top Contributor
ah super, am besten war der erste abschnitt :)

danke dir, soweit alles verstanden, irgendwie war es für mich zwingend, dass das Beispiel nur als innere Klasse gedacht war .. nuja, man lernt ja nie aus, richtig zu lesen :D

danke dir
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Einfaches Beispiel mit Netty Socket.IO Allgemeine Java-Themen 6
F Log4j2 SMTP Appender Beispiel Allgemeine Java-Themen 3
marcooooo Frage zum Beispiel im Anhang Allgemeine Java-Themen 16
O Suche größeres Beispiel für WebserverAnwendung mit Java Allgemeine Java-Themen 2
B MVC-Pattern größeres Beispiel Allgemeine Java-Themen 16
M Fabrik Methode, gutes Beispiel? Allgemeine Java-Themen 0
S Ist Java intrinsisch 'sicherer' als zum Beispiel C/C++ ? Allgemeine Java-Themen 2
E einfaches Beispiel zu MVC und Sinn V --> M ? Allgemeine Java-Themen 22
Gossi Threads Suche ein (einfaches) Beispiel Allgemeine Java-Themen 5
Hotkey Beispiel für grosse Java Projekte Allgemeine Java-Themen 9
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
hdi Beispiel für EDT Violations gesucht Allgemeine Java-Themen 4
hdi Probleme mit Deadlock-Beispiel Allgemeine Java-Themen 11
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
M Frage zu Interfaces (Beispiel: Comparable) Allgemeine Java-Themen 13
V Ganz einfaches MVC-Beispiel?! Allgemeine Java-Themen 107
E Exmatrikulations-Beispiel Allgemeine Java-Themen 8
G multithreading, concurrency conveyor belt beispiel Allgemeine Java-Themen 2
T Prototyp Beispiel Allgemeine Java-Themen 12
J Einfaches AspectJ Beispiel Allgemeine Java-Themen 2
reibi javax.crypto.SecretKey - Einfaches Beispiel gewünscht ;-) Allgemeine Java-Themen 2
J Threads, Doppelpufferung --> Beispiel gefunden, geht net Allgemeine Java-Themen 16
F Installer für Windows schreiben! Hat jemand ein Beispiel? Allgemeine Java-Themen 8
K Brauche euren Lösungsweg zu einem File/IO-Beispiel Allgemeine Java-Themen 23
E Servlet-Beispiel gesucht Allgemeine Java-Themen 3
E Methoden abstract static Methode Allgemeine Java-Themen 8
N nicht static und auch nicht new Allgemeine Java-Themen 3
P static Blocks und variablen Allgemeine Java-Themen 41
Kirby.exe Cannot make a static reference to the non-static field rimWidth Allgemeine Java-Themen 12
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
K Static Variablen verbieten Allgemeine Java-Themen 10
C Generic collections und static typing Allgemeine Java-Themen 4
M Warum nicht static ? Allgemeine Java-Themen 10
M Eine static-Methode verlassen Allgemeine Java-Themen 2
B Schlüsselworte [ERLEDIGT] static { } - Was ist das und wofür kann ich das brauchen? Allgemeine Java-Themen 1
J private static final String variable Allgemeine Java-Themen 8
L Non-static-Variables in Enumerationen Allgemeine Java-Themen 2
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
T Enumeration/Static Final/Bitfield Allgemeine Java-Themen 6
T Static kann nicht verändert werden Allgemeine Java-Themen 3
W Threads Cannot make a static reference.. Allgemeine Java-Themen 13
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
N Static oder andere Lösung Allgemeine Java-Themen 5
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
M Wo hin mit static factory methods? Allgemeine Java-Themen 40
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
S Cannot make a static reference to the non-static field MySecondClass.Points Allgemeine Java-Themen 3
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
S auf public void Methode zugreifen ohne static Allgemeine Java-Themen 11
K Static - Problem Allgemeine Java-Themen 10
M Variablen Variablenzugriff aus static void Allgemeine Java-Themen 21
S static methoden Allgemeine Java-Themen 9
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
B static Variable / Unterklasse Allgemeine Java-Themen 2
I Was macht static { ... } ? Allgemeine Java-Themen 8
G static inner Klassen Allgemeine Java-Themen 7
G static und dynamic linking? Allgemeine Java-Themen 32
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
J Verständnisfrage - nested static classes Allgemeine Java-Themen 11
G static- Methoden überschreiben Allgemeine Java-Themen 10
E Geschwindigkeit static Allgemeine Java-Themen 6
V Static oder wie? Allgemeine Java-Themen 61
I reflection get inner static classes Allgemeine Java-Themen 2
L static main - Spezifikation? Allgemeine Java-Themen 7
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
D static Allgemeine Java-Themen 46
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
oliver1974 "(.) should be accessed in a static way" Falsche W Allgemeine Java-Themen 6
P static Klassenvariable Allgemeine Java-Themen 15
B JPasswordField klassenübergreifend auslesen->static Probl Allgemeine Java-Themen 4
F Methoden: static vs. instance Allgemeine Java-Themen 24
MQue static Methoden/Klassen Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
G Java-Befehle Native und Static Allgemeine Java-Themen 2
conan2 static-Block in Klassen Allgemeine Java-Themen 6
M JNI, static.a mit load.Library laden? Allgemeine Java-Themen 2
K Static Members von Superklasse für JEDEN Erben Allgemeine Java-Themen 6
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
M static-Methode vorschreiben Allgemeine Java-Themen 5
S singleton vs. static Allgemeine Java-Themen 7
G Object mit static Feldern speichern Allgemeine Java-Themen 9
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
conan2 "Cannot make a static reference to the non-static field Allgemeine Java-Themen 8
P Singleton vs static Allgemeine Java-Themen 19
J parameterized und static fields Allgemeine Java-Themen 4
A Static reference to non-static field Allgemeine Java-Themen 10
S static umgehen Allgemeine Java-Themen 5
G static oder nicht Allgemeine Java-Themen 4
J Problem mit static/non-static Allgemeine Java-Themen 2
G getAppletContext() in static Methode Allgemeine Java-Themen 3
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
O does not declare a static final serialVersionUID field of . Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben