java - Scala:实现 Java 接口(interface)会导致类型不兼容

标签 java scala types interface

我有一个 Java 接口(interface),我想在 Scala 中实现。该接口(interface)包含以下方法声明:

  public Boolean existsTable(String tableId);

我的 Scala 实现是:

  override def existsTable(tableId: String): Boolean = {
    val dbmeta = connection.getMetaData()
    val dbtables = dbmeta.getTables(null, null, channelId, null)
    if (dbtables.next())
      // table exists
      return true
    else
      return false
  }

由于某种原因,我收到错误 “重写方法存在于特征 xyz 中的表 类型 (tableId: String)Boolean;方法存在表具有不兼容的类型”

但我真的不知道哪里可能存在不兼容的类型,因为它只是一个 boolean 值,即返回类型?

问候。

PS:当我没有实现接口(interface)时,我曾经以完全相同的方式使用过此方法,因此该方法本身应该没有错误。只是 Scala 中 Java 接口(interface)的实现让我很为难。

最佳答案

正如评论中指出的那样,这不起作用的原因是 Scala 的 boolean 值与 Java 的 boolean 值不同。解决此问题的快速方法是:

import java.lang.{Boolean => JBoolean}

override def existsTable(tableId: String): JBoolean

通过为类型设置别名,您想要返回的内容会更加清晰。您当然可以将其定义为:

override def existsTable(tableId: String): java.lang.Boolean

关于java - Scala:实现 Java 接口(interface)会导致类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089760/

相关文章:

scala - 如何在 stub 上调用真实方法

python - 为什么具有相同 `id` 的两个函数可以具有不同的属性?

java - java中如果值为1.01则四舍五入为1,如果为1.1则为2?

java - 属性文件中的值以逗号分隔,读取文件仅加载第一个元素

java - BouncyCaSTLe ECDH key 协议(protocol)失败

Java创建多个新文件

java - 如何在 Java 8 (Scala) 中将日期时间字符串转换为长(UNIX 纪元时间)

Scala 元组选项

types - 为什么 Rust 不能推断 Iterator::sum 的结果类型?

types - Julia 矩阵乘法类型行为