如何在Android 2.10.1中获得Option[T]字段类型



如下代码:

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])
}
消息定义:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Message {
}

在PC上我可以得到正确的输出:

Member type: Option[Long]

但是在Android上,我得到的输出是:

Member type: Option[java.lang.Object]
我的问题是:
    为什么相同的代码在PC和Android上输出不同的结果?
  1. 如何获得像PC这样的正确类型?

更新:

只有Option[T], T是Int, Long, Byte等基本类型有这个问题。如果我使用Option[java.lang.]

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

相关内容

  • 没有找到相关文章