将x10对象导入java

时间:2017-02-23 07:02:01

标签: java managed x10 x10-language

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

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]类型的对象。

2 个答案:

答案 0 :(得分:0)

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

Public void getX10ArrayList(ArrayList[String] nameList):

答案 1 :(得分:0)

不幸的是,当前的X10类型系统不允许X10类实现参数化Java接口。虽然看起来正确的解决方案是将界面定义为@Darpan建议:

public void getX10ArrayList(ArrayList[String] nameList);

当对Java接口进行类型检查时,类型参数将从X10接口中删除,因此类型不同。有关从X10到Java类的转换的详细信息,请参阅文章Compiling X10 to 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 {
        // ...
    }
}