我正在尝试在Xtend中进行最简单的操作,但不知道如何操作。我想在for循环中向double
数组添加double[]
值。
例如:
def do(EList<MyObject> list) {
var double[] array = newDoubleArrayOfSize(list.size);
for (i : 0 ..< list.size) {
array[i] = list.get(i).myValue;
}
return array;
}
第四行显示错误,因为我无法使用array[i] = ...
。
如何在Xtend中实现它?在用户指南中没有找到任何内容。
答案 0 :(得分:2)
Xtend有一个不同的(&#34;类似列表&#34;)语法来访问数组元素,有关详细信息,请参阅related documentation:
通过扩展来检索和设置数组的值 方法get(int)和set(int,T),它们是专门重载的 数组并直接转换为等效的本机Java代码 myArray的[INT]。
所以你的代码应该是:
def method(EList<MyObject> list) {
var double[] array = newDoubleArrayOfSize(list.size);
for (i : 0 ..< list.size) {
array.set(i, list.get(i).myValue);
}
return array;
}
您可以通过省略分号和array
变量的类型声明来进一步简化您的方法:
def method(EList<MyObject> list) {
val array = newDoubleArrayOfSize(list.size)
for (i : 0 ..< list.size) {
array.set(i, list.get(i).myValue)
}
return array
}
另一种方法是使用更多功能样式编写方法。如果您可以将EList
替换为List
(或EList
extends / implements List
),那么您只需写一下:
def double[] method(List<MyObject> list) {
list.map[myValue]
}
在这种情况下,您必须将返回类型显式声明为double[]
,否则会将其推断为List<Double>
。
(还有一件事:通常集合比数组更受欢迎,因为它们更灵活,API更丰富,而Xtend还有一些额外的好处,如collection literals。)