Scala IntelliJ警告:“;trait中使用的抽象值可能会在初始化过程中导致错误";-什么';懒惰的抽象val-s有什么问题?

Scala IntelliJ警告:“;trait中使用的抽象值可能会在初始化过程中导致错误";-什么';懒惰的抽象val-s有什么问题?,scala,intellij-idea,initialization,traits,cake-pattern,Scala,Intellij Idea,Initialization,Traits,Cake Pattern,IntelliJ警告我“trait中的抽象值可能会在初始化过程中导致错误”——如下图所示 这是什么意思 我应该认真对待这个警告吗 我应该使用def-s而不是lazy val-s吗 在这种情况下,它们不一样吗?因为我们在这里讨论的是依赖注入,它创建了一个静态的(可能是循环的)对象图 但是!因为有lazy修饰符,所以图形是否循环并不重要。对吧? 这些值本身的行为就像它们是一个记忆函数,对吗 由于我们在这里讨论的是引用(在静态对象图中),其中引用是有向边,对象是节点,这里的问题是什么 请举例说明,在

IntelliJ警告我“trait中的抽象值可能会在初始化过程中导致错误”——如下图所示

  • 这是什么意思
  • 我应该认真对待这个警告吗
  • 我应该使用
    def
    -s而不是
    lazy val
    -s吗
  • 在这种情况下,它们不一样吗?因为我们在这里讨论的是依赖注入,它创建了一个静态的(可能是循环的)对象图
  • 但是!因为有
    lazy
    修饰符,所以图形是否循环并不重要。对吧?
  • 这些值本身的行为就像它们是一个记忆函数,对吗
  • 由于我们在这里讨论的是引用(在静态对象图中),其中引用是有向边,对象是节点,这里的问题是什么
  • 请举例说明,在初始化过程中,使用
    lazy val
    -s而不是
    def
    -s可能会导致问题
感谢您阅读:)

整个代码库都在github上

是有问题的特定行(在github上)

我还将有问题的代码复制粘贴到此处:

trait EntityMarshallers[V<:EntityValue[V]]{
  implicit lazy val decoderEntityV:    Decoder[Entity[V]]
  implicit lazy val encoderEntityV:    Encoder[Entity[V]]
  implicit lazy val _encoderV:         Encoder[V]
  implicit lazy val classTag:          ClassTag[V]

}

trait EntityMarshallers[VIf如果你试图编译你的代码,你会看到你得到编译错误“lazy value可能不是抽象的”。尝试使它们
隐式定义
。关于初始化警告,请参阅和。@MarioGalic,但奇怪的是,在本文中有一个解决方案是
lazy val
s