我有一个工厂,它应该根据名称返回一个实现。
val moduleMap = Map(Modules.moduleName -> new ModuleImpl)
def getModule(moduleName: String): Module =
moduleMap.get(moduleName) match {
case Some(m) => m
case _ =>
throw new ModuleNotFoundException(
s"$moduleName - Module could not be found.")
}
为了使对“getModule”方法的每次调用不创建实例,有一个映射,其中所有模块都必须在引导类中初始化。我想摆脱手动执行此操作的需要(所有类都有一个独特的功能)。
我想到的选项列表:
- 反射(我们可以使用 Scala 反射 API 或任何第三方库)
- 自动化过程。
- 需要在启动时立即初始化。
- 反思是一种痛苦。
- 元编程(ScalaMeta)+反射
- 宏只更改代码,稍后执行。
我们可以将初始化过程移到编译时间吗?
我知道编译器可以优化和替换代码,编译前的下一个片段
val a = 5 + 5
在编译编译器将该部分更改为 10 之后,我们可以使用一些指令或其他工具在编译时评估和执行一些代码并仅使用最终值吗?