Java <-> Scala 转换 - “值不是……的成员”

Ale*_*x R 1 java scala type-conversion

我在使用 Java 方法的 Scala 代码时遇到问题。

它正在呼唤:

value getDepth is not a member of amqpManagment.utils.data.ChessObject
var depth: Int = chessObjects.getDepth()
                                  ^
Run Code Online (Sandbox Code Playgroud)

然而,我在 Java 代码的许多其他地方使用 getDepth 并且它工作得很好。另外,在放置该代码后,它在 InteliJ 中工作了几个小时,这很奇怪,但也许项目在更改后没有重新构建......

然而 InteliJ 显示代码没问题,但在编译过程中显示错误。通过 InteliJ 或终端重建没有帮助。

斯卡拉代码:

import amqpManagment.utils.data.ChessObject
object ChessScheduler {

  // DEPTH GAME
  def startGameWithDepthRule(chessObject: ChessObject) : Integer = 
  {
    ...
    val depth: Int = chessObjects.getDepth()
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

Java代码:

@Getter
@Setter
public class ChessObject {
    private Integer depth;
    ...
}
Run Code Online (Sandbox Code Playgroud)

构建.sbt

import sbt.Keys._
import sbt.Level

name := "ChessEngineModuler"
logLevel := Level.Warn

version := "1.0"

scalaVersion := "2.12.2"
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。

Ale*_*x R 5

你好@Chenna Reddy :)

谢谢你的帖子,看来龙目岛确实有问题。然而在你的回答之后我意识到这是一个问题,因为 Scala 代码是在 Java 代码之前编译的。

我检查了三个解决方案,因为我添加了依赖项并打开了注释处理器。

  1. 第一个解决方案只是将 Getters 和 Setters 添加到 Java 类中,而不是通过 Lombok,但这是一个丑陋的解决方案

  2. 第二种解决方案只是添加“文件”->“设置”->“构建、执行、部署”->“编译器”->“Scala 编译器”->“编译顺序”->“Java”,然后添加“Scala”。

  3. 第三个是在build.sbt中设置的->compileOrder := CompileOrder.JavaThenScala

如果我们想将该代码部署到某个地方,我认为第三个是最好的:)