У меня есть материнская черта «Контракт», которая распространяется на ряд классов дел, одним из которых является «масштаб». Я пытаюсь создать общую функцию таким образом, что она принимает объект одного из этих классов case и выполняет какое-то действие на основе того, что это за объект. Код:Создание общей функции и использование TypeOf на ней
def getType[T: TypeTag](obj: T) = typeOf[T]
def makeXMLElem[T <: Contract](contract: T): String = {
println(getType(contract))
val symb = getType(contract).declaration(newTermName(name)).asTerm
val instanceMirror = runtimeMirror(contract.getClass.getClassLoader).reflect(contract)
val symbMirror = instanceMirror.reflectField(symb)
val symbValue = symbMirror.get
.......
Теперь, я пытаюсь передать 'масштаб' и проверить его тип. Функция getType возвращает свой тип как «Контракт», а не «масштаб». Как вы можете понять, что я пытаюсь получить доступ к параметрам на «шкале» случай класса с помощью оператора:
val symb = getType(contract).declaration(newTermName(name)).asTerm
корпус класса «масштаб» имеет следующую подпись:
case class scale(amount:Int, currency:String)
В виду того что тип сам извлекается неправильно, значение «Symb» не дает никакого значения, и я получаю следующее сообщение об ошибке во время выполнения:
Caused by: scala.ScalaReflectionException: <none> is not a term
Как я могу сделать функцию makeXMLElem более общий характер без потери O f информацию о подписи «шкалы» или любого класса, который расширяет «Контракт», если на то пошло?