Итак, у меня есть класс Scala, который выглядит следующим образом:Любой способ доступа к типу объявления Scala Option во время выполнения с использованием отражения?
class TestClass {
var value: Option[Int] = None
}
и я решение проблемы, когда у меня есть строковое значение, и я хочу, чтобы заставить его в этот вариант [Int] во время выполнения с помощью отражения , Так, в другой части кода (который ничего не знает о TestClass) У меня есть некоторый код, как это:
def setField[A <: Object](target: A, fieldName: String, value: String) {
val field = target.getClass.getDeclaredField(fieldName)
val coercedValue = ???; // How do I figure out that this needs to be Option[Int] ?
field.set(target, coercedValue)
}
Чтобы сделать это, мне нужно знать, что поле является вариант, и что параметр типа в опции Int.
Каковы мои возможности для выяснения того, что тип «значение» является опцией [Int] во время выполнения (т. Е. С использованием отражения)?
Я видел похожие проблемы, решенные путем аннотации поля, например. @OptionType (int.class). Я предпочел бы решение, которое не требовало бы аннотаций по цели отражения, если это было возможно.
Я не вижу необходимости отражения. Любое значение, статическим типом которого является 'Option [Int]', либо 'None', либо' Some [Int] '. –
Привет Рэндалл. Мне нужно использовать отражение, потому что класс, который манипулирует полями, например TestClass.value, не имеет доступа во время компиляции к классам, которые он манипулирует. Я добавил пример к моему вопросу, показывающий, как манипулируют целевыми объектами, и выделяя точку, в которой мне нужен ответ на этот вопрос. –