0

例如:

object CampaignTypes extends Enumeration {

  type CampaignType = Value

  val ABC,DEF = Value
}

object campaignTypeId extends EnumNameField(this, CampaignTypes) {
    override val defaultValue = CampaignTypes.ABC
  }

IntelliJ 用红色突出显示 CampaignTypes.ABC,并带有 CampaignTypes.Value 类型的消息表达式不符合预期类型 EnumType#Value

代码编译并工作。但是,IntelliJ 将其标记为错误,使得代码难以阅读(因为还有许多其他情况,IntelliJ 也无法解决)。还使用了正确的 Scala 插件。有没有办法解决这个问题?

在 BsonRecord 上定义的另一个示例 wrt 方法

sealed trait Product {...}

class Document extends BsonRecord[Document] {
  object productType extends StringField(this, 20)
  ....
  def toTyped: Option[Product] = this.productType.get match {//something which returns an Option[Product] from a List[Product]}
}

object documents extends BsonRecordListField(this, Document) {
    def toProducts: Set[Product] =
      this.get.flatMap(_.toTyped)(breakOut) //Cannot resolve symbol toTyped
}
4

1 回答 1

0

是的,您可以通过提供类型提示来帮助 Intellij:

object campaignTypeId extends EnumNameField[A, CampaignsTypes.type](this, CampaignTypes) {
    override val defaultValue = CampaignTypes.ABC
  }

A封装类/对象的类型在哪里

对于一般解决方案:

  • 尝试始终提供泛型类型而不是依赖推理,正如您可以看到 Intellij IDEA 中的类型在困难的情况下并不是很好。
  • 如果这不能解决问题,请尝试提供编译器提示。Lift 依赖 Manifest,但可以是 classTag 或其他东西。显式这种隐式可以帮助 IDEA 正确解析类型

对于 BsonRecordListField,显式泛型类型也应该解决它。

于 2018-08-10T13:14:55.073 回答