[英]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.