Почему getActualTypeArguments возвращает Object вместо Integer для Option [Int]? - PullRequest
2 голосов
/ 01 сентября 2011

У меня проблемы с выяснением того, как получить параметр типа Option, когда параметр типа Int

Я попробовал следующий код:

class TestClass {
  val intField: Option[Int] = Some(1)
}

val cls = new TestClass
val field = cls.getDeclaredField("intField")
val typeParams = field.getGenericType.asInstanceOf[ParameterizedType].getActualTypeArguments

typeParams дает мне Java.lang.Object

мой вопрос, как мне заставить его вернуть java.lang.Integer мне

1 Ответ

7 голосов
/ 01 сентября 2011

Точная информация общего типа теряется во время выполнения.См. Отражение обобщений и примечание:

... в то время как JVM не будет отслеживать фактические аргументы типа для экземпляров универсального класса,он отслеживает фактические аргументы типа для подклассов универсальных классов .

Здесь нет подклассов - отсюда и причина для Object а не Integer.Возможно, посмотрите на Манифесты (трюк Scala для неявных типов с расширенными возможностями) ?

Счастливое кодирование.

...