IntelliJ无法解析某些类型,例如:Mongo记录上的EnumValue-Scala

时间:2018-08-09 19:26:19

标签: scala intellij-idea lift intellij-scala

例如:

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上定义的w.r.t方法示例

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
}

1 个答案:

答案 0 :(得分:1)

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

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

其中A是封装类/对象的类型

对于一般解决方案:

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

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