Scala 如何在Android 2.10.1中获取选项[T]字段类型?
代码如下:Scala 如何在Android 2.10.1中获取选项[T]字段类型?,scala,reflection,scala-2.10,Scala,Reflection,Scala 2.10,代码如下: import scala.reflect.runtime.{universe => ru, currentMirror => cm} import ru._ def test[T:TypeTag](obj: T) { for (c <- typeOf[T].declarations; if c.annotations.exists(_.tpe =:= ru.typeOf[Message])) { val tpe = c.asClass.selfType
import scala.reflect.runtime.{universe => ru, currentMirror => cm}
import ru._
def test[T:TypeTag](obj: T) {
for (c <- typeOf[T].declarations; if c.annotations.exists(_.tpe =:= ru.typeOf[Message])) {
val tpe = c.asClass.selfType
for (m <- tpe.declarations.sorted) {
println("Member type: " + m.typeSignature)
}
}
}
object Test extends App {
test(TestMessageDef)
}
object TestMessageDef {
@Message
case class A(d: Option[Long])
}
在PC上,我可以获得正确的输出:
Member type: Option[Long]
但在Android上,我得到的输出是:
Member type: Option[java.lang.Object]
我的问题是:
只有选项[T],T是Int、Long、Byte等基元类型存在此问题。如果我使用选项[java.lang.Long],它的输出将如预期的那样。Android与java并非100%兼容。您看到的是Java反射API差异的结果,或者是Scala反射API在转换为DalvikVM时丢失了所需的注释
Member type: Option[java.lang.Object]