我们需要将一个x10 arrayliststring作为对象传递给一个Java方法。我们在中尝试的是this.The方法签名,如下所示。
public void getX10ArrayList ( ArrayList <String > nameList):我们在X10类中实现该方法,如下所示。
public def getX10ArrayList ( var names : ArrayList [String] ) {
// do something
}我们收到一个编译错误,表示接口需要一个类型为x10.util.ArrayList的对象,但是我们发送的对象类型是x10.util.ArrayList x10.lang.String`。
发布于 2017-03-07 23:41:03
不幸的是,当前的X10类型系统不允许X10类实现参数化的X10接口。虽然它看起来是正确的解决方案是定义接口,正如@Darpan建议的那样:
public void getX10ArrayList(ArrayList[String] nameList);当对Java接口进行类型检查时,类型参数将从X10接口中删除,因此类型不同。从X10到Java类转换的详细信息可以在论文 (Takeuchi et al. 2011)中找到。
一个可能的解决办法是将泛型类包装成非参数化类型。例如:
// MyArrayList.java
import java.util.ArrayList;
class MyArrayList {
public ArrayList<String> list;
}
// X10ArrayListProvider.java
public interface X10ArrayListProvider {
public void getX10ArrayList(MyArrayList nameList);
}
// ArrayListProvider.x10
import MyArrayList;
import X10ArrayListProvider;
public class ArrayListProvider implements X10ArrayListProvider {
public def getX10ArrayList(names:MyArrayList):void {
// ...
}
}发布于 2017-02-23 07:32:52
你不需要把你的界面签名声明为-
Public void getX10ArrayList(ArrayList[String] nameList):https://stackoverflow.com/questions/42409056
复制相似问题