动态创建案例类

kyl*_*tts 5 scala scala-macros slick

我正在使用一个 csv 库,它接受一个案例类并将其转换为行供我阅读。

语法非常接近File(path).asCsvReader[caseClass]. 链接到这里的库

然而问题是我想从数据库中的表生成案例类。我可以接收数据库中的表以及列的类型(Int、Long、Double、String 等),但我不知道如何使用该数据动态创建案例类,因为我在编译时不知道这些信息。

正因为如此,我也无法使用宏,因为我不知道宏编译时的表数据。

那么,一旦收到表数据,然后将该案例类传递给 csv 库,我将如何动态创建该案例类?

Zyo*_*oma 0

那么基本上您需要有关案例类的运行时信息?我想你应该使用ClassTag:

import scala.reflect._

def asCsvReader[T: ClassTag]: T = {
  classTag[T].runtimeClass.getDeclaredConstructor(...).newInstance(...)
  ...
}
Run Code Online (Sandbox Code Playgroud)

这将允许您在运行时实例化您的案例类。

由于您可以确定 CSV 列的类型,因此您可以提供适当的类型getDeclaredConstructor和newInstance方法。