¿Cómo se proporcionan constructores sobrecargados en Scala?
135
Vale la pena mencionar explícitamente que los Constructores auxiliares en Scala deben llamar a la respuesta del constructor primario (como en landon9720) u otro constructor auxiliar de la misma clase, como su primera acción. No pueden simplemente llamar explícita o implícitamente al constructor de la superclase como pueden hacerlo en Java. Esto asegura que el constructor primario es el único punto de entrada a la clase.
class Foo(x: Int, y: Int, z: String) {
// default y parameter to 0
def this(x: Int, z: String) = this(x, 0, z)
// default x & y parameters to 0
// calls previous auxiliary constructor which calls the primary constructor
def this(z: String) = this(0, z);
}
new Foo(x=2,z=4)
ynew Foo(z=5)
si cambia su primera línea aclass Foo(x: Int = 0, y: Int = 0, z: String) {
new
palabra clave sea necesaria incluso para las clases de casos.fuente
A partir de Scala 2.8.0, también puede tener valores predeterminados para los parámetros de contructor y método. Me gusta esto
Los parámetros con valores predeterminados deben aparecer después de los que no tienen valores predeterminados en la lista de parámetros.
fuente
class Foo(val x:Int, y:Int=2*x)
no funciona.new Foo(x=2,z=4)
se imprimiráFoo(2,0,4)
.Mientras miraba mi código, de repente me di cuenta de que sobrecargaba un constructor. Entonces recordé esa pregunta y regresé para dar otra respuesta:
En Scala, no puede sobrecargar los constructores, pero puede hacerlo con funciones.
Además, muchos optan por hacer que la
apply
función de un objeto complementario sea una fábrica para la clase respectiva.Haciendo que esta clase sea abstracta y sobrecargando la
apply
función para implementar-instanciar esta clase, tiene su "constructor" sobrecargado:Tenga en cuenta que defino explícitamente cada uno
apply
para devolverExpectation[T]
, de lo contrario, devolvería un tipo de patoExpectation[T]{val expected: List[T]}
.fuente
Prueba esto
fuente