Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht?

udem

Mitglied
Guten Tag,

ich frage mich, wo ich einsehen kann, wie diese Methode oder andere Methoden ohne Anweisungsblock funktionieren.
Wo oder wie finde ich die Implementierung?

Freundliche Grüße
 
Erst einmal zum Verständnis:
  • Collection ist ein Interface
  • size() ist keine default Methode.

Damit hat Collection keine Implementation von size(). Klassen, die Collection implementieren müssen aber eine Implementation von size haben (oder sie müssen abstrakt sein).

Wenn Du den Source Code einsehen willst, dann kannst Du per Google danach suchen. Das dürfte das Einfachste sein. Also z.B. Suche nach
Java Collection source
Das liefert dann einige Implementationen
 
Erst einmal zum Verständnis:
  • Collection ist ein Interface
  • size() ist keine default Methode.

Damit hat Collection keine Implementation von size(). Klassen, die Collection implementieren müssen aber eine Implementation von size haben (oder sie müssen abstrakt sein).

Wenn Du den Source Code einsehen willst, dann kannst Du per Google danach suchen. Das dürfte das Einfachste sein. Also z.B. Suche nach
Java Collection source
Das liefert dann einige Implementationen
Das ist das Ergebnis der Suche; eine Beschreibung der Methode:

Returns {@code true} if this list contains no elements.
@Return {@code true} if this list contains no elements

Das ist doch aber keine Implementierung?
Wie kann es sein, dass ich die Methode size() z.B. auf eine ArrayList anwenden kann, welche auch wiederum nur eine Beschreibung der Methode enthält?
 
Also die Suche nach "Java Collection source" liefert bei Google bei mir folgende 3 Top Suchergebnisse:

Und wenn Du Dir diese ansiehst, dann findest Du bei jeder den Source von Collection.

Und da size() halt keine Default Methode ist, findet sich dort keine Implementierung sondern nur:
Java:
    /**
     * Returns the number of elements in this collection.  If this collection
     * contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
     * <tt>Integer.MAX_VALUE</tt>.
     *
     * @return the number of elements in this collection
     */
    int size();

Daher muss man bei einer konkreten Klasse schauen. @Flown hat da bei seinem Link z.B. ArrayList genommen.
 
Also die Suche nach "Java Collection source" liefert bei Google bei mir folgende 3 Top Suchergebnisse:

Und wenn Du Dir diese ansiehst, dann findest Du bei jeder den Source von Collection.

Und da size() halt keine Default Methode ist, findet sich dort keine Implementierung sondern nur:
Java:
    /**
     * Returns the number of elements in this collection.  If this collection
     * contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
     * <tt>Integer.MAX_VALUE</tt>.
     *
     * @return the number of elements in this collection
     */
    int size();

Daher muss man bei einer konkreten Klasse schauen. @Flown hat da bei seinem Link z.B. ArrayList genommen.

Ich muss wohl irgendwo einen Fehler machen,
aber wenn ich mir die Klasse ArrayList anschaue, wo ich eine Implementierung erwarten würde, weil sie nicht abstrakt ist, finde ich auch nur eine Beschreibung der Methode size() und keine Implementierung.
 
Ich muss wohl irgendwo einen Fehler machen,
aber wenn ich mir die Klasse ArrayList anschaue, wo ich eine Implementierung erwarten würde, weil sie nicht abstrakt ist, finde ich auch nur eine Beschreibung der Methode size() und keine Implementierung.
Dann folge einmal dem Link von @Flown und suche auf der Seite nach size(). Dann findest Du:
Java:
    /**
     * Returns the number of elements in this list.
     *
     * @return the number of elements in this list
     */
    public int size() {
        return size;
    }

(In dem gezeigten Code ab Zeile 247)

Edit: Noch einmal Den Beitrag von Flown als Zitat:
Im OpenJDK GitHub-Repo: HERE
 
Dann folge einmal dem Link von @Flown und suche auf der Seite nach size(). Dann findest Du:
Java:
    /**
     * Returns the number of elements in this list.
     *
     * @return the number of elements in this list
     */
    public int size() {
        return size;
    }

(In dem gezeigten Code ab Zeile 247)

Edit: Noch einmal Den Beitrag von Flown als Zitat:
Okay, ich hab die Anweisung "return size;" einfach übersehen.
Danke für die Mühe und den mehrmaligen Hinweis.
 

Neue Themen


Zurück
Oben