gpt4 book ai didi

scala - 如何在 Android 2.10.1 中获取 Option[T] 字段类型?

转载 作者:行者123 更新时间:2023-12-02 05:01:26 24 4
gpt4 key购买 nike

代码如下:

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]

我的问题是:

  1. 为什么相同的代码在 PC 和 Android 上输出不同的结果?
  2. 如何像 PC 一样获得正确的类型?

更新:

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

最佳答案

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

关于scala - 如何在 Android 2.10.1 中获取 Option[T] 字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com