我正在尝试创建一个稍后实例化的错误侦听器类列表。
有问题的表达式是:
import configs.syntax._
import akka.actor.Actor
private val errorListeners = applicationConfig
.get[Seq[Class[_ <: Actor]]]("connectors.event-listeners")
.valueOrElse(Seq.empty)
这在编译时会导致以下错误:
EventListenerProvider.scala:12:33: Seq[Class[_ <: akka.actor.Actor]] is abstract but not sealed
[error] .get[Seq[Class[_ <: Actor]]]("connectors.event-listeners")
此列表显式枚举了 get
支持的所有类型。没有任何理由期望一个为使用 Config
库读取字符串提供一些薄薄的语法糖层的库会突然返回类型 Class[_]
的实例。它可以将字符串类型的配置值转换为 String
s、Int
s、List
s 和一些简单的 case
-类,但它并不意味着从字符串中反序列化任意类的通用方法。我假设错误消息来自一个宏,该宏试图将Class
解释为密封特征,但随后失败,因为它abstract
但不是sealed
。
不要对图书馆抱有太多期望。它是用于读取字符串,而不是用于处理ClassLoader
。将类的名称读取为字符串列表,然后使用 Class.forName
或类似的东西映射它。