
场景是想实现一个 dsl, 从 kafka 读取消息,sink 到 mysql。
现在遇到的问题是: 读取自定义的 schema, 转化成 scala 的 case class, 怎么获取它的类型?
以简化代码示例, 比较好解释:
import scala.reflect.runtime.universe._ import scala.tools.reflect.ToolBox val cm = runtimeMirror(getClass.getClassLoader) val toolBox = cm.mkToolBox() toolBox.compile(q"""case class Foo(value:String) """) // 如何获取 Foo 的类型, 因为下文需要将其传入序列化 // Deserializer[T] val cOnsumerSettings= ConsumerSettings(system, new StringDeserializer, new Deserializer[Foo]) 在 scala 的REPl可以获取它的类型, 这是怎么实现的?
scala> toolBox.compile(q"""case class Foo(value:String) """) res19: () => Any = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$Lambda$1471/913724364@5429565e scala> new Foo("1") res20: Foo = Foo(1) 1 scalaer OP 就是想实现在编译前获取 runtime 阶段的类, 求大佬指导下 |
2 shyling 2019 年 11 月 6 日 没法获取。。。toolBox.compile(q"""case class Foo(value:String) """) 已经编译且运行了。。 你可以考虑下能不能编译时运行一遍插入代码,再继续编译。。 |
4 felixin 2019 年 11 月 7 日 via Android 用 mao 存不就好了,为啥要用 case class ? |
5 felixin 2019 年 11 月 7 日 via Android 手误,map。反正都是手写字符串了也没什么类型安全可言了 |
6 felixin 2019 年 11 月 7 日 via Android 或者你看一下 avro |