Todas las clases en Scala tienen una constructor primario y opcionalmente algunos constructores auxiliares (que deben diferir al constructor primario u otro constructor auxiliar).
El problema en su caso es que en ambos casos ha definido que el constructor principal no toma argumentos, y luego en el segundo caso intenta definir un constructor auxiliar con la misma firma. Esto no funciona, por la misma razón que lo siguiente no se compilará:
// Primary constructor takes a String
class Foo(s: String) {
// Auxiliary constructor also takes a String?? (compile error)
def this(a: String) {
this(a)
}
}
Esto no es nada que ver con el hecho de que el constructor es sin argumentos; las siguientes compilaciones por ejemplo:
class Foo(s: String) {
// alternative no-arg constructor (with different signature from primary)
def this() {
this("Default value from auxiliary constructor")
}
}
En particular, en el segundo ejemplo, el comentario "el único constructor" es mal. Los constructores auxiliares son siempre secundarios al constructor primario, y nunca pueden ser el único constructor.
FWIW, el primer ejemplo es la única opción que tiene abierta, pero me parece bien. Si acaba de comenzar a utilizar Scala, estoy seguro de que comenzará a sentirse bien lo suficientemente pronto, y es importante evitar las formas Java de hacer las cosas cuando hay más alternativas idiomáticas.
Los constructores auxiliares también pueden diferir a otros constructores auxiliares definidos anteriormente. –
@ jean-phillipe: Gracias, tienes razón. Me di cuenta de que no era exacto en el ámbito más amplio yo mismo; puesto corregido ahora –
Gracias, algo me molestó sobre los constructores de Scala desde el principio, pero nunca me estorbó demasiado ... todo está claro ahora. – HairyFotr