Допустим, у вас есть три класса дел
case class MyClass(id:String)
case class MyClass2(name : String)
case class MyClass3(age : String)
Теперь вы можете написать пользовательскую функцию с дополнительным параметром T, обозначающим тип класса как
protected def DeSerializeJson[T](json: String,classType: T) = {
val gson = new Gson
classType match {
case MyClass => gson.fromJson(json, classOf[MyClass])
case MyClass2 => gson.fromJson(json, classOf[MyClass2])
case MyClass3 => gson.fromJson(json, classOf[MyClass3])
}
}
Теперь на основеТип класса, который мы передали в качестве аргумента в методе, мы можем сопоставить его с шаблоном, чтобы получить требуемый результат.
Вызывая функцию с различными параметрами как
DeSerializeJson("{ \"id\" : \"101\"}",MyClass)
DeSerializeJson("{ \"name\" : \"Tom\"}",MyClass2)
DeSerializeJson("{ \"age\" : \"12\"}",MyClass3)
, мы получаем вывод
res0: Product with Serializable = MyClass(101)
res1: Product with Serializable = MyClass2(Tom)
res2: Product with Serializable = MyClass3(12)