将 x10 对象导入 java
Importing x10 objects into java
我们需要将 x10 arraylist[string] 作为对象传递给 Java 方法。我们尝试的是 this.The 接口中的 Java 方法签名如下。
public void getX10ArrayList ( ArrayList <String > nameList):
我们按如下方式在 X10 class 中实现该方法。
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 class 实现参数化 Java 接口。尽管看起来正确的解决方案是按照@Darpan 的建议定义接口:
public void getX10ArrayList(ArrayList[String] nameList);
当对Java接口进行类型检查时,类型参数从X10接口中删除,因此类型不同。从 X10 到 Java classes 的翻译细节可以在论文 Compiling X10 to Java (Takeuchi et al. 2011).
中找到
一种可能的解决方法是将泛型 class 包装在非参数化类型中。例如:
// 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 {
// ...
}
}
我们需要将 x10 arraylist[string] 作为对象传递给 Java 方法。我们尝试的是 this.The 接口中的 Java 方法签名如下。
public void getX10ArrayList ( ArrayList <String > nameList):
我们按如下方式在 X10 class 中实现该方法。
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 class 实现参数化 Java 接口。尽管看起来正确的解决方案是按照@Darpan 的建议定义接口:
public void getX10ArrayList(ArrayList[String] nameList);
当对Java接口进行类型检查时,类型参数从X10接口中删除,因此类型不同。从 X10 到 Java classes 的翻译细节可以在论文 Compiling X10 to Java (Takeuchi et al. 2011).
中找到一种可能的解决方法是将泛型 class 包装在非参数化类型中。例如:
// 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 {
// ...
}
}