【问题标题】:Java <-> Scala convertion - "value is not a member of"Java <-> Scala 转换 - “值不是成员”
【发布时间】:2017-11-28 18:29:13
【问题描述】:

我对带有 Java 方法的 Scala 代码有疑问。

它在召唤:

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

但是,我在 Java 代码的许多其他地方使用 getDepth,它工作正常。 同样,在放置该代码之后,它在 InteliJ 中工作了几个小时,这很奇怪,但可能项目在更改之后没有重建自己......

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

Scala 代码:

import amqpManagment.utils.data.ChessObject
object ChessScheduler {

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

Java 代码:

@Getter
@Setter
public class ChessObject {
    private Integer depth;
    ...
}

build.sbt

import sbt.Keys._
import sbt.Level

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

version := "1.0"

scalaVersion := "2.12.2"

感谢您的帮助。

【问题讨论】:

  • 那个错误信息准确吗?复制粘贴有错误吗?少了一个点:chessObjectsgetDepth()
  • 你好@jwvh,是的,我只是在这个问题上打错了,它是关于那个代码的。我现在将编辑它。谢谢:)
  • 你在scala中有CheeJSONObject,但在java中有ChessObject。这些是不同的类别。或许,前者有getDepth,后者没有?
  • Heyo @Dima,你说得对,但这也不是问题:/我只是更改了它的名称,以免打扰你从这个文件创建的 JSON,因为它是本地问题。很抱歉给您带来不便:(我认为这是因为 InteliJ 没有看到问题,所以首先没有看到它,只有编译不正确并且失败:/

标签: java scala type-conversion


【解决方案1】:

你好@Chenna Reddy :)

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

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

  1. 第一个解决方案只是将 Getter 和 Setter 添加到 Java 类中,而不是由 Lombok,但是它是丑陋的解决方案

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

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

如果我们想在某处部署该代码,我认为 3rd 是最好的 :)

【讨论】:

  • FWIW,我喜欢第一个解决方案。或者只是将变量公开。
  • 解决方案 #2 对我有用。我的最初设置为混合。
【解决方案2】:

看起来您正在使用 lombok 来自动生成 getter。请添加lombok依赖。

libraryDependencies += "org.projectlombok" % "lombok" % "1.16.16"

如果您正在单独构建 Java 项目并且该项目具有 lombok 作为编译时依赖项,则不需要上述步骤。那么生成的 jar 文件必须已经包含了所有的 getter。

关于为什么 Intellij 有时会显示错误,可能是您没有从 Files -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors 启用注释处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多