作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个框架。这些接口(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/
我是一名优秀的程序员,十分优秀!