Я пытаюсь вызвать член из универсального типа, и вот оригинальный способ запуска функции
SourceStruct
- это объект, который я хочу заменить чем-то вроде T
.
override def process(t: SourceStruct, runtimeContext: RuntimeContext, requestIndexer: RequestIndexer): Unit = {
val json = new util.HashMap[String, String]()
json.put("time", t.rating.toString)
json.put("userId", t.userId.id.toString)
json.put("itemId", t.itemId.id)
requestIndexer.add(request)
}
когда я заменю SourceStruct
на T
, как мне позвонить на t.userId
?
override def process(t: T, runtimeContext: RuntimeContext, requestIndexer: RequestIndexer): Unit = {
val json = new util.HashMap[String, String]()
// json.put("userId", t.userId.id)
// json.put("itemId", t.itemId.id)
// json.put("rating", t.rating.toString)
val request = Requests
.indexRequest()
.index(index)
.`type`(indexType)
.source(json)
requestIndexer.add(request)
}
заранее спасибо
Я могу получитьучастник, используя
typeOf[T].members.collect {
case m: MethodSymbol if m.isCaseAccessor => m
}.toList
, но по-прежнему не имеет ни малейшего понятия о вышеуказанном вопросе
РЕДАКТИРОВАТЬ:
, например:
case class ExampleClass(x: Int, y: Int)
case class ExampleClass2(xx: Int, yy: Int)
затем в функции процесса, как я могу присвоить значение члену
override def process(t: T, ...) = {
//t.x = 10 or t.xx = 10 ???
}
решено
Преобразовать любой класс в HashMap