Я рассматриваю образец образца лямбда и javaFX «MaryHadALittleLambda» (https://github.com/steveonjava/MaryHadALittleLambda).ObservableList <Node> метод ошибка ссылки в Eclipse
Все отлично компилируется, кроме метода
private void populateCells(Group root, final SpriteView.Mary mary) {
// Gratuitous use of lambdas to do nested iteration!
Group cells = new Group();
IntStream.range(0, HORIZONTAL_CELLS).mapToObj(i ->
Rectangle rect = new Rectangle(i * CELL_SIZE, j * CELL_SIZE, CELL_SIZE, CELL_SIZE);
rect.setFill(Color.rgb(0, 0, 0, 0));
rect.setStrokeType(StrokeType.INSIDE);
rect.setStroke(Color.BLACK);
rect.setOnMousePressed(e -> mary.moveTo(new Location(i, j)));
return rect;
})
).flatMap(s -> s).forEach(cells.getChildren()::add); // <-- ERROR HERE
root.getChildren().add(cells);
}
как я получаю сообщение об ошибке в Eclipse, на Foreach линии,
The type ObservableList<Node> does not define add(Object) that is applicable here
в цикле, принимает эталонный метод для метода экземпляра из клеток Объект, который отлично выглядит для меня. Если я использую следующую лямбду вместо этого, он отлично работает:
).flatMap(s -> s).forEach(r -> cells.getChildren().add((Rectangle) r));
Таким образом, кажется, что каждый особенность Явы 1.8 составляет безопасна для этой ссылки JavaFX. Я предполагаю, что что-то не так с моей версией или настройкой Java? Я использую:
Eclipse Standard/SDK version: Kepler Service Release 2
Eclipse Java Development Tools Patch with Java 8 support (for Kepler SR2)
И используя JRE от этой версии Java (выход из командной строки):
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
Спасибо.
Я попробовал проект MaryHadALittleLambda в IntelliJ Idea IU-135,667 (13.1.2) с Java 8b132 (релиз производства). Идея также отмечает ссылку 'cells.getChildren() :: add' как ошибку в редакторе, но Idea все равно будет компилировать и исполнять исходный текст без ошибок. Я не могу объяснить вам, почему это так. – jewelsea