首页 > 解决方案 > 如何初始化一个类,详情如下图

问题描述

我有一个不带参数并返回白名单列表的 WhitelistThunk 方法,如何初始化这个 AuthorizedServicesImpl 类?

sealed trait WhitelistConcern extends Product with Serializable

  object WhitelistConcern {
    case class Whitelist(accountId: String, ruleName: String) extends WhitelistConcern
    case class whi(accountId: String) extends WhitelistConcern
  }

  type WhitelistThunk = () => List[Whitelist]

class AuthorizedServicesImpl(
 draxWhitelist : => Map[String, WhitelistThunk]){}

这可以将类型从字符串列表转换为白名单列表。

lazy val pattrn = "([^:]*):([^:]*)".r
  lazy val patt = "([^:]*)".r
  lazy val sdcWhitelistHelper = () => new SDCWhitelistHelper(configuration, sdcRetriever).whitelistSentToDrax.collect{
    case pattrn(accnt, rule) => Whitelist(accnt, rule)

  }

  lazy val sdcWhitelistHelper1 = () => new SDCWhitelistHelper(configuration, sdcRetriever).whitelistSentToDrax.collect{
    case patt(accnt) => whi(accnt)
  }

这就是我现在正在做的事情,但错误是

Required scala.Predef.Map [scala.Predef.String, WhitelistThunk]
Found scala.collection.immutable.Map[java.lang.String, List[Whitelist]]
 private lazy val authorizedServices =
    new AuthorizedServicesImpl(
      Map("whitelist" -> WhitelistHelper),
    )

标签: scala

解决方案


WhitelistHelper是 aList[Whitelist]但你需要() => List[Whitelist],所以更新声明如下:

lazy val WhitelistHelper = () => new Helper(configuration, Retriever) ...

或像这样更改类创建:

new AuthorizedServicesImpl(
  Map("whitelist" -> (() => WhitelistHelper)),
)

推荐阅读