繁体   English   中英

转换为Scala的Java通用类型本身不接受超类

[英]Java Generic Type Converted to Scala does not accept super class itself

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

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

现在,我的scala代码使用如下界面。

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

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

Scala编译器在第2行将println(calculate(component))错误。 错误是:类型不匹配,预期: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]特例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM