-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Description
Issue description
When I follow the runtime reflection example, I get an error as shown below.
https://docs.scala-lang.org/overviews/reflection/overview.html#examples
Welcome to Scala 2.13.3 (OpenJDK 64-Bit Server VM, Java 1.8.0_252).
Type in expressions for evaluation. Or try :help.
scala> import scala.reflect.runtime.{universe => ru}
import scala.reflect.runtime.{universe=>ru}
scala> case class Person(name: String)
class Person
scala> val m = ru.runtimeMirror(getClass.getClassLoader)
val m: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.nsc.interpreter.IMain$TranslatingClassLoader@4b20ca2b of type class scala.tools.nsc.interpreter.IMain$TranslatingClassLoader with classpath [(memory)] and parent being scala.reflect.internal.util.ScalaClassLoader$URLClassLoader@682af059 of type class scala.reflect.internal.util.ScalaClassLoader$URLClassLoader with classpath [file:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/resources.jar,file:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/rt.jar,file:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/jsse.jar,file:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/lib/jce.jar,file:/Library/Jav...
scala> val classPerson = ru.typeOf[Person].typeSymbol.asClass
val classPerson: reflect.runtime.universe.ClassSymbol = class Person
scala> val cm = m.reflectClass(classPerson)
scala.ScalaReflectionException: class Person is an inner class, use reflectClass on an InstanceMirror to obtain its ClassMirror
at scala.reflect.runtime.JavaMirrors$JavaMirror.ErrorInnerClass(JavaMirrors.scala:156)
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectClass(JavaMirrors.scala:226)
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectClass(JavaMirrors.scala:70)
... 32 elidedUsing InstanceMirror also results in an error.
scala> val person = Person("John Doe")
val person: Person = Person(John Doe)
scala> val cm = m.reflect(person).reflectClass(classPerson)
scala.ScalaReflectionException: expected a member of class Person, you provided class Person
at scala.reflect.runtime.JavaMirrors$JavaMirror.ErrorNotMember(JavaMirrors.scala:156)
at scala.reflect.runtime.JavaMirrors$JavaMirror.$anonfun$checkMemberOf$1(JavaMirrors.scala:257)
at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$checkMemberOf(JavaMirrors.scala:247)
at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectClass(JavaMirrors.scala:295)
at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectClass(JavaMirrors.scala:276)
... 32 elidedMetadata
Metadata
Assignees
Labels
No labels