gpt4 book ai didi

转换为 Scala 的 Java 泛型类型不接受父类(super class)本身

转载 作者:行者123 更新时间:2023-12-02 11:13:19 25 4
gpt4 key购买 nike

我正在编写一个框架。这些接口(interface)是用 Java 代码编写和编译的。客户端使用 Scala 和这些接口(interface)。这是界面示例。

public interface Context {
MyComponent<? extends File> getComponent();
}

现在我的scala代码使用如下接口(interface)。

val component = context.getComponent();
println(calculate(component));

def calculate( component: MyComponent[File] ): Unit = ???

Scala 编译器在 println(calculate(component)) 的第 2 行抛出错误。错误是:类型不匹配,预期:MyComponent[File],实际:MyComponent[_ <: File]。

最佳答案

Java的通配符类型

? extends File

对应存在类型

_ <: File

在斯卡拉。尝试更改签名

def calculate(component: MyComponent[File]): Unit = ???

def calculate(component: MyComponent[_ <: File]): Unit = ???

另请注意,如果 MyComponent是您控制下的 Scala 类,然后将不变类型参数更改为协变类型参数 +F也可能有效,因为这样每个 MyComponent[F] forSome { type F <: File }将是 MyComponent[File] 的特例.

关于转换为 Scala 的 Java 泛型类型不接受父类(super class)本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com