【问题标题】:Scala inheritance from Java class with generic types in constructorScala 从 Java 类继承构造函数中的泛型类型
【发布时间】:2020-09-11 09:51:56
【问题描述】:

如何在 Scala 的构造函数中扩展一个期望 Map<?, ?> 的 Java 类?

Java 类的样子

public class MyJavaClass {

  private final Map<String, ?> originals;

  public MyJavaClass(Map<?, ?> originals,  Map<String, ?> configProviderProps, boolean doLog) { ... }

  public MyJavaClass(Map<?, ?> originals) {
    this(originals, Collections.emptyMap(), true);
  }
}

在 Scala 中,我试图做类似下面的事情,但我的 IDE 告诉我它“无法解析重载的构造函数”:

class myScalaClass[K <: AnyRef, V <: AnyRef](origi: Map[K, V]) extends MyJavaClass(origi) { ... }

还尝试将AnyRef 替换为java.lang.Object,但未成功。我正在使用 Java 8 和 Scala 2.12.11。

【问题讨论】:

  • 通配符对你有用还是你必须知道类型 K 和 V?另外,我认为您根本不需要上限
  • 其实,从头开始,你不需要通配符

标签: java scala generics scala-java-interop existential-type


【解决方案1】:

试试

class myScalaClass(origi: java.util.Map[_, _]) extends MyJavaClass(origi) {  }

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 2014-10-15
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多