Создал класс A, который расширяет класс B, который принимает два параметра.Scala reflection - конструктор не называется
Когда я создаю объект класса A с использованием отражения и передавая два параметра, объект создается без какого-либо исключения, но два параметра «конструктор» не содержат значений, которые я передал. Является ли это предполагаемым поведением или я делаю что-то неправильно?
Пример кода:
class B (p1: Int = 0, p2: String = "") {
...
}
class A extends B {
...
}
val mirror = universe.runtimeMirror(getClass.getClassLoader)
val classSymbol = mirror.classSymbol(Class.forName("package.A"))
val constructor = mirror.reflectClass(classSymbol).reflectConstructor(
classSymbol.toType.decl(universe.termNames.CONSTRUCTOR).asMethod)
val object: B = constructor(1, "C").asInstanceOf[B]
"объект" содержит экземпляр А, но с P1 = 0 и P2 = "". Я ожидал, что он будет содержать p1 = 1 и p2 = "C".
Если я переведу (p1: Int = 0, p2: String = "")
в A, он работает должным образом.
Является ли это нормальным поведением, и мои ожидания были просто неправильными, или есть ошибка в моем коде?
Если 'A extends B' предоставил предоставленную вами реализацию, вы должны предоставить параметры конструктора для' B'. – sebszyller
Конструктор для 'A' даже не принимает никаких аргументов. Если вы попытаетесь сделать это без отражения, вы получите ошибку компиляции. Не знаете, почему вы получаете значения по умолчанию вместо ошибки времени выполнения. –