Scala跨文件共享包类出现Type not found错误求助
解决同包类引用"not found: Type"问题
一、先核对文件目录结构
Scala对包和目录的对应关系要求很严,你的包是blockbattle,那三个类文件必须放在src/main/scala/blockbattle这个子目录里:
- src/main/scala/blockbattle/Pos.scala
- src/main/scala/blockbattle/KeyControl.scala
- src/main/scala/blockbattle/Mole.scala
二、确认每个文件的包声明
每个类文件开头必须写对包名,比如Pos.scala的第一行得是:
package blockbattle class Pos(x: Int, y: Int) { // 你的代码逻辑 }
KeyControl和Mole的文件也要一样,开头加上package blockbattle,确保所有类都在同一个包下面。
三、别乱加访问修饰符
Scala默认类是包级可见的,千万别给类加private或者private[xxx](xxx不是当前blockbattle包)的修饰符,比如:
- 错误示例:
private class Pos(...) - 正确写法:
class Pos(...)或者private[blockbattle] class Pos(...)
四、刷新Metals的项目索引
VSCode的Metals偶尔会抽风缓存旧结构,按这步骤操作:
- 打开命令面板(Ctrl+Shift+P / Cmd+Shift+P)
- 搜
Metals: Reload Workspace执行 - 等它重新把项目索引一遍
五、检查sbt的build配置(如果用sbt)
要是用sbt管理项目,得确保build.sbt里的scala版本和源目录配置没问题,比如:
scalaVersion := "3.3.1" // 换成你实际用的版本,2.x也可以 sourceDirectory in Compile := baseDirectory.value / "src/main/scala"
六、验证引用写法
在Mole.scala里直接用Pos和KeyControl就行,同包不用额外导入,比如:
package blockbattle class Mole(pos: Pos, keyControl: KeyControl) { // 你的代码 }
要是还不行,就删掉项目根目录下的.metals和.bloop文件夹,再重新执行Metals: Reload Workspace,强制重建索引。
内容的提问来源于stack exchange,提问作者simon forslund
相关产品推荐
相关产品推荐

