2016-07-02 10 views
2

Innerhalb der Scala-Standardbibliothek, bemerkte ich dies:Scala Sammelklasse, die sich erweitern kann? AbstractSeq Verwirrung

package scala 
package collection 
package mutable 

import generic._ 
... 

/** Explicit instantiation of the `Seq` trait to reduce class file size in subclasses. */ 
abstract class AbstractSeq[A] extends scala.collection.AbstractSeq[A] with Seq[A] 

AbstractSeq[A] extends AbstractSeq[A] with Seq[A]?

Was ist hier los?

Antwort

5

Es erweitert scala.collection.AbstractSeq, während die Definition von scala.collection.mutable.AbstractSeq ist, also die verschiedenen Klassen sind. (Beachten Sie die verschiedenen Paketnamen: vs. scala.collection.mutable.)

+0

Zwei Fragen. Ist das Schreiben "Paket Scala Paket Sammlung Paket veränderbar" das gleiche wie "Paket scala.collection.mutable"? Zweitens, was ist das "Seq-Klasse-Dateigröße" zu reduzieren? –

+0

Ich rate nur für die zweite Frage, aber in der Regel 'muable.AbstractSeq' wäre auch ein' generic.Seq' in den meisten Implementierungen, obwohl im Fall, dass diese Methoden (implementiert 'Seq') an dieser Stelle nicht eingemischt wurden Die Trait-Implementierungen müssten auch für die anderen Implementierungsklassen generiert werden. Wenn Sie also 5 konkrete Klassen hätten, hätten Sie 5 mal den Byte-Code für diese, während in diesem Fall - wegen virtueller Aufrufe - nur einmal (und immer noch in der Lage sein, sie zu überschreiben). –

3

Sie sind verschiedene Klassen. Der, den Sie betrachten, ist scala.collection.mutable.AbstractSeq, der, den es ausdehnt, ist scala.collection.AbstractSeq.

Paket ist eine Art Namespace. Verschiedene Klassen können denselben Namen haben, solange sie sich in verschiedenen Paketen befinden.

+0

Zwei Fragen. Ist "package scala package collection package mutable" dasselbe wie "package scala.collection.mutable"? Zweitens, was ist das "Instanziierung ... reduzieren Sie die Größe der Klassendatei" Seq-Ding? –

+1

Ja, es ist das gleiche. Ich bin mir nicht sicher über die zweite Frage. Scheint etwas damit zu tun zu haben, wie scala intern Klassen generiert, die von mehreren Merkmalen erben. – Dima