lundi 5 septembre 2016

Scala reflection - constructor not called

I created a class A that extends class B, which takes two parameters.

When I create a class object of A using reflection and passing two parameters, an object is create w/o any exception, but the two "constructor" parameters do not contain the values I passed. Is that the intended behaviour or am I doing something wrong?

Sample code:

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]

"object" contains an instance of A, but with p1 = 0 and p2 = "". I expected it to contain p1 = 1 and p2 = "C".

If I move (p1: Int = 0, p2: String = "") to A it works as expected.

Is that the normal behaviour and my expectations were just wrong, or is there a mistake in my code?





Aucun commentaire:

Enregistrer un commentaire