gpt4 book ai didi

java - Eclipse 中的 ObservableList 方法引用错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:05 26 4
gpt4 key购买 nike

我正在查看 lambda 和 javaFX 示例项目“MaryHadALittleLambda”(https://github.com/steveonjava/MaryHadALittleLambda)。

除了方法之外,一切都编译正常

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   

forEach 对 cells 对象的实例方法进行方法引用,这对我来说看起来完全有效。如果我改用以下 lambda,它工作正常:

    ).flatMap(s -> s).forEach(r -> cells.getChildren().add((Rectangle) r)); 

看来 java 1.8 的每个特性对于这个 javaFx 引用都是安全编译的。我的猜测是我的 Java 版本或设置有问题吗?我正在使用:

Eclipse Standard/SDK version: Kepler Service Release 2
Eclipse Java Development Tools Patch with Java 8 support (for Kepler SR2)

并使用此 Java 版本的 JRE(命令行输出):

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)

谢谢。

最佳答案

我将通过提供一些更新来回答我自己的问题:我联系了建议我尝试 java 编译器而不是 eclipse 的作者:使用 Ant 构建(并因此使用 jdk javac 编译器)编译得很好,应用程序运行。

当我查看 eclipse 中 java 8 支持的状态时,似乎有很多事情需要解决:https://bugs.eclipse.org/bugs/buglist.cgi?quicksearch=1.8%20lambda

正如@jewelsea 指出的那样,Intellij Idea 显示错误但会编译并执行(我假设它使用 jdk 提供的 javac)。

所以答案是:等待即将到来的 eclipse 和/或 jdk 更新。这个特定案例很容易变通。

真正的问题是 mapToObj提供一个 Stream<Object> , 循环将通过 Object::add期望 Node实例(如 Rectangle 是)。

关于java - Eclipse 中的 ObservableList<Node> 方法引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22999649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com