我正在编写一个框架。接口是用Java代码编写和编译的。客户端使用Scala和那些接口。这是界面的一个例子。
....
LatLng latLng = getLocationFromAddress(TheNameOfActivity.this, "london");
if(latLng != null){
MarkerOptions options = new MarkerOptions().position(latLng);
if(googleMap != null){
googleMap.addMarker(options);
{
}
}
现在我的scala代码使用如下界面。
public interface Context {
MyComponent<? extends File> getComponent();
}
Scala编译器在{2}的第2行抛出错误。错误是:类型不匹配,预期:MyComponent [File],actual:MyComponent [_&lt;:File]。
答案 0 :(得分:1)
Java的通配符类型
const a = [{id:1, name:'a'},{id:2, name:'b'},
{id:3, name:'c'},{id:4, name:'d'},{id:5, name:'e'}];
const b = ['a','d'];
const c = a.filter(function(item){
return b.indexOf(item.name) !== -1
}).map(function(item){
return item.id
});
console.log(c);
对应于存在类型
? extends File
Scala中的尝试更改签名
_ <: File
到
def calculate(component: MyComponent[File]): Unit = ???
另请注意,如果def calculate(component: MyComponent[_ <: File]): Unit = ???
是受您控制的Scala类,那么将不变类型参数更改为协变类型参数MyComponent
也可能有效,因为每个+F
将是MyComponent[F] forSome { type F <: File }
的特例。