将X10对象导入Java



我们需要将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]`。

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

public void getX10ArrayList(ArrayList[String] nameList);

当Java接口被类型检查时,类型参数将从X10接口删除,因此类型不同。从X10到Java类的翻译的详细信息可以在论文中找到X10到Java (Takeuchi等,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 {
        // ...
    }
}

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

Public void getX10ArrayList(ArrayList[String] nameList):

相关内容

  • 没有找到相关文章

最新更新