Ein einfacher Weg wäre, es nur zu null
zu initialisieren. Dazu müssen Sie einen Typen angeben, Array[Int]
und eine var
(statt val
) zu machen, so dass Sie es später ändern könnten:
class Foo() {
var array: Array[Int] = null // how do I leave initialization till later?
def initializeArray(size : Int) = array = Array.ofDim[Int](size)
}
Dies ist jedoch in Scala nicht sehr gute Praxis ist. Es könnte besser sein Option
ein verwenden:
class Foo() {
var array: Option[Array[Int]] = None // how do I leave initialization till later?
def initializeArray(size : Int) = array = Some(Array.ofDim[Int](size))
}
Dieser einen Benutzer sagt ausdrücklich, dass es möglich ist, dass array
auf nichts festgelegt werden kann, und vermeidet NullPointerException
s. Sie können mehr über Option
auf StackOverflow oder anderswo lesen.
Schließlich die besten Entwürfe in Scala verlassen sich auf unveränderliche Klassen. In einem solchen Fall würden Sie die Erstellung des Foo
verzögern, bis Sie tatsächlich wissen, was Sie einfügen möchten. Ohne etwas über Ihr Design zu wissen, ist es jedoch schwer zu sagen, wie Sie das am besten einrichten können.
EDIT: Basierend auf Ihrer Beschreibung, würde ich Ihr Design in zwei Teile trennen: eine Methode zum Parsen der Datei und eine unveränderliche Foo
zum Speichern des Endergebnisses.
class Foo(array: Array[Int]) {
}
object Foo {
def fromFile() = {
val array: Array[Int] = /* parse file into the right structure */
new Foo(array)
}
}
Dann könnte man einfach sagen:
val foo = Foo.fromFile(filename)
und die foo
wäre eine vollständige, unveränderlich Foo
sein.
Warum müssen Sie die Initialisierung bis später verlassen? Es könnte sein, dass es eine bessere Lösung als "Initialisierung bis später verlassen" gibt. –