Comment fournissez-vous des constructeurs surchargés en Scala ?
Réponses
Trop de publicités?Il est important de mentionner explicitement que les constructeurs auxiliaire dans la Scala doit appeler soit réponse constructeur principal (comme landon9720), ou un autre constructeur auxiliaire de la même classe, leur première action. Ils ne peut pas simplement appeler constructeur de la superclasse explicitement ou implicitement que possible en Java. Cela garantit que le constructeur principal est le seul point d’entrée à la classe.
En regardant mon code, j'ai soudain réalisé que je ne sorte de surcharge de constructeur. Je me suis alors souvenu de cette question et revient à donner une autre réponse:
En Scala, vous ne pouvez pas surcharger les constructeurs, mais vous pouvez le faire avec les fonctions.
Aussi, nombreux sont ceux qui choisissent de faire de l' apply
de la fonction d'un compagnon objet d'une usine pour la catégorie concernée.
Faire de cette classe abstraite et la surcharge de l' apply
fonction à mettre en œuvre-instancier cette classe, vous avez votre surchargé "constructeur":
abstract class Expectation[T] extends BooleanStatement {
val expected: Seq[T]
…
}
object Expectation {
def apply[T](expd: T ): Expectation[T] = new Expectation[T] {val expected = List(expd)}
def apply[T](expd: Seq[T]): Expectation[T] = new Expectation[T] {val expected = expd }
def main(args: Array[String]): Unit = {
val expectTrueness = Expectation(true)
…
}
}
Notez que j'ai explicitement définir chaque apply
de revenir Expectation[T]
, sinon il serait de retour à un canard tapé Expectation[T]{val expected: List[T]}
.
J’ai pensé que peut-être Les constructeurs Scala (2008-11-11) pourrait ajouter des informations supplémentaires.