код, как это:Как получить поле типа [T] на Android в 2.10.1?
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 {
}
На ПК я могу получить правильный вывод:
Member type: Option[Long]
но на Android, я получаю выход:
Member type: Option[java.lang.Object]
Мой вопрос:
- Почему такой же код выводит разные результаты на ПК и Android?
- Как получить правильный тип, например, ПК?
ОБНОВЛЕНО:
только Опция [T], T является Int, Long, Byte и т.д. примитивного типа имеет эту проблему. Если я использовал Option [java.lang.Long], он выводит как ожидаемый.