首页 > 解决方案 > Scala:编译错误:无法解析重载方法

问题描述

我已使用以下方法将 Play/Scala 项目导入 Intellij,但由于我不明白的原因,该项目会出现编译错误。任何想法这里有什么问题?

我正在使用 Java 8 和 Scala 2.11.6。

  def fetchUser(id: Long): Option[UserRecord] =
    Cache.getAs[UserRecord](id.toString).map { user =>
      Some(user)
    } getOrElse {
      DB.withConnection { connection =>
        val sql = DSL.using(connection, SQLDialect.POSTGRES_9_4)
        val user = Option(sql.selectFrom[UserRecord](USER).where(USER.ID.equal(id)).fetchOne())
        user.foreach { u =>
          Cache.set(u.getId.toString, u)
        }
        user
      }
    }

编译错误出现在withConnection方法调用上。错误是:Cannot resolve overloaded method 'withConnection'

当我尝试跳转到withConnection方法的实现时,编译器会在类中建议两种可能的方法play.api.db.DB (2.4.3)

  /**
   * Execute a block of code, providing a JDBC connection. The connection is
   * automatically released.
   *
   * @param name The datasource name.
   * @param autocommit when `true`, sets this connection to auto-commit
   * @param block Code block to execute.
   */
  def withConnection[A](name: String = "default", autocommit: Boolean = true)(block: Connection => A)(implicit app: Application): A =
    db.database(name).withConnection(autocommit)(block)

  /**
   * Execute a block of code, providing a JDBC connection. The connection and all created statements are
   * automatically released.
   *
   * @param block Code block to execute.
   */
  def withConnection[A](block: Connection => A)(implicit app: Application): A =
    db.database("default").withConnection(block)

标签: scalaintellij-ideajava-8playframeworkcompiler-errors

解决方案


编译器应该找到

def withConnection[A](block: Connection => A)(implicit app: Application): A =
    db.database("default").withConnection(block)

因为这与电话相匹配

DB.withConnection { ... }

这与

DB.withConnection( block = { ... })

只要能找到隐含的Application。我不知道这个隐式Application存在于哪里,但由于这是从一个示例项目到一本书,我认为它存在于某个地方并且过去曾工作过。

您已经发布了三个与构建有关此项目的错误有关的问题。请不要在每次遇到此项目的构建错误时发布新问题。那不是SO的重点。这些问题最好针对项目本身的维护者,即。作者在 GitHub 存储库的问题页面上。

现在看起来这个项目没有得到维护。这是一个老项目。由于版本过时,您很可能会遇到问题。考虑问一个关于构建旧游戏项目的问题。


推荐阅读