给出以下代码:
/**
* Prints the grid with hint numbers.
*/
private void printGridHints() {
minesweeperGrid.forEach((k, v) -> {
v.stream().forEach(
square -> square.isMineLocatedHere() ? System.out.print("*") : System.out.print(square
.getNumSurroundingMines()));
System.out.println();
});
}
我的编译器给出了以下错误:
error: incompatible types: bad return type in lambda expression
square -> square.isMineLocatedHere() ? System.out.print("*") : System.out.print(square
^
missing return value
我正在运行Gradle 2.2版,我安装了JDK 8u31。有趣的是,Eclipse没有显示任何编译器错误,即使在我清理并重建我的项目之后,但是当我在命令行上运行gradle build
时,我得到了这个编译器错误。
为什么我会收到此错误,我该如何解决?
答案 0 :(得分:12)
您不能将void
作为三元表达式中第二个和第三个表达式的类型。即,你不能
.... ? System.out.print(...) : System.out.print(...)
^^^^^ ^^^^^
(如果Eclipse另有说法,那就是一个错误。)请改用if
语句:
minesweeperGrid.forEach((k, v) -> {
v.stream().forEach(
square -> {
if (square.isMineLocatedHere())
System.out.println("*");
else
System.out.println(square.getNumSurroundingMines());
})
});
或按如下方式细分:
minesweeperGrid.forEach((k, v) -> {
v.stream().forEach(
square -> {
System.out.println(square.isMineLocatedHere()
? "*" : square.getNumSurroundingMines())
})
});