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? |
/**
* 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();
Also die Suche nach "Java Collection source" liefert bei Google bei mir folgende 3 Top Suchergebnisse:
- https://hg.openjdk.java.net/jdk8/jd...d/src/share/classes/java/util/Collection.java
- https://developer.classpath.org/doc/java/util/Collection-source.html
- https://github.com/AdoptOpenJDK/ope....base/share/classes/java/util/Collection.java
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.
Dann folge einmal dem Link von @Flown und suche auf der Seite nach size(). Dann findest Du: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.
/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}
Im OpenJDK GitHub-Repo: HERE
Okay, ich hab die Anweisung "return size;" einfach übersehen.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: