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]
我的问题是:

  • 为什么相同的代码在PC和Android上输出不同的结果
  • 如何获得像PC这样的正确类型
  • 更新:


    只有选项[T],T是Int、Long、Byte等基元类型存在此问题。如果我使用选项[java.lang.Long],它的输出将如预期的那样。

    Android与java并非100%兼容。您看到的是Java反射API差异的结果,或者是Scala反射API在转换为DalvikVM时丢失了所需的注释

    Member type: Option[java.lang.Object]