实现 Java 接口(interface)的 Scala 类 - 具有相同删除的双重定义

标签 scala scala-java-interop

我有一个 Java 接口(interface):

public interface FooJava {
    void consume(String... strings);
    void consume(Integer... ints);
}

我想在 Scala 中实现它:

class BarScala extends FooJava {
  override def consume(strings: String*): Unit = ???
  override def consume(ints: Integer*): Unit = ???
}

不幸的是,这失败了:

double definition:
override def consume(strings: String*): Unit at line 4 and
override def consume(ints: Integer*): Unit at line 5
have same type after erasure: (strings: Seq)Unit
  override def consume(ints: Integer*): Unit = ???

我知道 Java 编译器会创建 Bridge 方法,而 Scala 编译器不会这样做。

我尝试了一种使用 DummyImplicits 的方法:Are DummyImplicits used, and if so, how? , 但它显然失败了 - consume(ints: Integer*)(implicit i: DummyImplicit) 不覆盖任何内容

class BarScala extends FooJava {
  override def consume(strings: String*): Unit = ???
  override def consume(ints: Integer*)(implicit i: DummyImplicit): Unit = ???
}

我不拥有 Java 接口(interface)。 可以在 Scala 中实现吗? 我使用的是 Scala 2.12

最佳答案

您可以在 Java 中使用中间抽象类实现接口(interface),并在 Scala 中扩展该抽象类

abstract class FooJavaImpl implements FooJava {
    public abstract void consumeInts(Integer... ints);

    @Override
    public void consume(Integer... ints) {
        consumeInts(ints);
    }
}
class BarScala extends FooJavaImpl {
  override def consume(strings: String*): Unit = ???
  def consume(ints: Integer*)(implicit i: DummyImplicit): Unit = ???
  override def consumeInts(ints: Integer*): Unit = consume(ints: _*)
}

或者没有DummyImplicit

abstract class FooJavaImpl implements FooJava {
    public abstract void consumeInts(Integer... ints);

    public abstract void consumeStrs(String... strs);

    @Override
    public void consume(Integer... ints) {
        consumeInts(ints);
    }

    @Override
    public void consume(String... strs) {
        consumeStrs(strs);
    }
}
class BarScala extends FooJavaImpl {
  override def consumeInts(ints: Integer*): Unit = ???
  override def consumeStrs(strs: String*): Unit = ???
}

关于实现 Java 接口(interface)的 Scala 类 - 具有相同删除的双重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76014938/

相关文章:

java - 从 Java 访问 scala.None

java - 在 Java 中实现 Scala 函数

java - 如何在使用 maven 的 intelliJ 中向 Java 项目添加 scala 依赖项

generics - 类型推断: Using generic methods with implicit type conversion

scala - 在 Scala 中的对象之间共享变量

list - 如何在 Scala 中通过预处理将列表转换为可变映射?

scala - 不可能从java文件调用scala包函数吗?

scala - Spark Scala UDP 在监听端口上接收

java - 如何将 Scala 列表转换为 Java ArrayList

java - 从 Java 使用 Scala : passing functions as parameters