编译时出现"Seq[Class[_ <: akka.actor.Actor]] is abstract but not sealed"错误



我正在尝试创建一个稍后实例化的错误侦听器类列表。

有问题的表达式是:

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 或类似的东西映射它。

相关内容

最新更新