IntelliJ中Scala GADTs类型推断失效问题咨询
IntelliJ Scala编辑器类型推断报错问题解决
问题说明
这段Scala代码在sbt中可正常编译运行,但在IntelliJ(无论Scala 2还是Scala 3版本)的编辑器中会报错,提示eval方法返回类型应为A,但实际上类型推断理应能正常完成:
object Solution1 { trait Expr[A] case class B(bool: Boolean) extends Expr[Boolean] case class I(i: Int) extends Expr[Int] def eval[A](expr: Expr[A]): A = expr match { case B(b) => b case I(i) => i } }
解决方法
- 更新Scala插件到最新版:打开
Settings->Plugins,找到Scala插件,检查并安装最新更新,很多类型推断相关的bug会在新版本中修复。 - 同步sbt项目配置:点击IntelliJ右侧sbt面板的刷新按钮(🔄),让编辑器完全同步sbt的构建配置,避免旧缓存导致的错误提示。
- 重新构建项目:执行
Build->Rebuild Project,清除编译缓存后重新构建,解决缓存引发的错误显示问题。 - 添加Scala 2编译器参数(针对Scala 2项目):打开
Settings->Build, Execution, Deployment->Compiler->Scala Compiler,在Additional compiler options中加入-Ypartial-unification,优化泛型类型推断逻辑。 - 改用sbt shell编译检查:在
Settings->Build, Execution, Deployment->Build Tools->sbt中,勾选Use sbt shell for build and import,让IntelliJ完全使用sbt的编译器做代码检查,和sbt编译结果保持一致。
内容的提问来源于stack exchange,提问作者user_1357
相关产品推荐
相关产品推荐

