Xtend имеет другую («список подобных») синтаксис для доступа к элементам массива, см related documentation подробности:
Получение и установка значений массивов осуществляется с помощью расширения методы получения (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
распространяется/инвентарем List
), то можно было бы просто написать:
def double[] method(List<MyObject> list) {
list.map[myValue]
}
В этом случае вы должны явно объявить тип возвращаемого значения, как double[]
, потому что в противном случае было бы сделать вывод, как List<Double>
.
(Просто еще одна вещь:. Обычно коллекции предпочтительнее массивов, потому что они являются более гибкими и имеют более богатые API-интерфейсы, и Xtend имеет некоторые дополнительные вкусности, а как collection literals)
Большое спасибо Snorbi, это помогло меня много! – John