Код, который у меня есть:
abstract class Animal {
def init(animalType: String, jsonBlob: String)
}
class Dog (name: String, colour: String) {
def init(animalType: String, jsonBlob: String) : Unit = {
name = jsonBlob.name
colour = jsonBlob.colour
}
}
class Cat (address: String) {
def init(animalType: String, jsonBlob: String) : Unit = {
address = jsonBlob.address
}
}
То, что я хочу: создать экземпляр Cat или Dog динамически.
Я предпринял попытку с кодом, который выглядит следующим образом:
case class AnimalDefinition(animalType: String, jsonBlob: String)
val animalDefinitions : Array[AnimalDefinition] = //
val animals : Array[Animal] = animalDefinitions.map(new Animal(_.animalType, _.jsonBlob))
Он должен динамически создавать экземпляр правильного класса с помощью параметра animalType. Я думаю, что традиционно я сделал бы это, используя утверждение case (if animalType == "Cat", return new Cat(..))
. Но я считаю, что есть автоматический способ сделать это с помощью отражений.
Код не компилируется. Я пытался читать документы по отражению Scala, но у них нет примеров, показывающих динамическое создание экземпляров подклассов с дополнительными параметрами