将x10对象导入java

将x10对象导入java,java,managed,x10,x10-language,Java,Managed,X10,X10 Language,我们需要将x10 arraylist[string]作为对象传递给Java方法。我们尝试的是这个,Java接口中的方法签名如下 public void getX10ArrayList ( ArrayList <String > nameList): public def getX10ArrayList ( var names : ArrayList [String] ) { // do something } 我们收到一个编译错误,说接口需要类型为x10.util.Arr

我们需要将x10 arraylist[string]作为对象传递给Java方法。我们尝试的是这个,Java接口中的方法签名如下

public void getX10ArrayList ( ArrayList <String > nameList):
public def getX10ArrayList ( var names : ArrayList [String] ) {
    // do something
}

我们收到一个编译错误,说接口需要类型为
x10.util.ArrayList
的对象,但我们正在发送类型为
x10.util.ArrayList
[x10.lang.String]`。

您不需要将接口签名声明为-

Public void getX10ArrayList(ArrayList[String] nameList):

不幸的是,当前的X10类型系统不允许X10类实现参数化Java接口。尽管看起来正确的解决方案是按照@Darpan的建议定义接口:

public void getX10ArrayList(ArrayList[String]名称列表);
检查Java接口的类型时,类型参数将从X10接口中删除,因此类型不同。从X10到Java类的转换细节可以在本文中找到

一种可能的解决方法是将泛型类包装为非参数化类型。例如:

//MyArrayList.java
导入java.util.ArrayList;
类MyArrayList{
公共阵列列表;
}
//X10ArrayListProvider.java
公共接口X10ArrayListProvider{
public void getX10ArrayList(MyArrayList名称列表);
}
//ArrayListProvider.x10
导入MyArrayList;
导入ArrayListProvider;
公共类ArrayListProvider实现了X10ArrayListProvider{
public def getX10ArrayList(名称:MyArrayList):void{
// ...
}
}