Après avoir suivi cette question, j'essaie de comprendre comment appeler une méthode sur un objet. Les définitions pertinentes sont :
trait ThirdParty { def invoke = println("right") }
trait WeatherIcon { def invoke = println("wrong") }
class MyClass {
object objA extends ThirdParty
object objB extends WeatherIcon
}
J'ai obtenu un Symbol
pour objA
de cette manière :
import reflect.runtime.universe._
val stuff = typeOf[MyClass].members.filter(_.isValue).filter(_.typeSignature <:< typeOf[ThirdParty])
Cela renvoie un Iterable
avec un seul élément, disons :
val objASymbol = stuff.head.asModuleSymbol
J'ai ensuite essayé, sur la base de cette autre question, ceci :
val mirror = runtimeMirror(getClass.getClassLoader)
mirror.reflectModule(objASymbol)
Ce qui a entraîné le message d'erreur cité dans le sujet :
java.lang.Error: this is an inner module, use reflectModule on an InstanceMirror to obtain its ModuleMirror
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:118)
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:60)
Le problème est que je ne parviens pas à comprendre ce que ce message d'erreur me dit de faire!