Mit jelent ez a kód JAVA-ban?
(Egy statikus függvény definíciója, a többi részét a kódnak értem). Igazából a field -> kifejezéssel vannak gondjaim. Én úgy értelmezem mint egy lambda kifejezést, ami egy anonim oszályt hoz létre a visszatérési érték előállításához. A gondom pl. hogy a return type hogyan lesz GameBoard, amikor mindenütt return CellState van? Pontosan mit csinál ez a kód?
private static GameBoard board(String file) {
List<String> lines = linesOf(file);
return field -> {
Coordinate coord = FIELD_COORDINATE.get(requireNonNull(field));
switch (lines.get(coord.y).charAt(coord.x)) {
case 'x':
return CellState.OCCUPIED_BY_X;
case 'o':
return CellState.OCCUPIED_BY_O;
default:
return CellState.EMPTY;
}
};
}





A board(String) fv. egy GameBoard-ot ad vissza. Azt jól látod, hogy az egy lambda. A kód ami a return CellState-t csinálja, az a lambdának a része. A külső board(String) fv. pedig ezt a lambdát adja vissza, amiről a Java fordító kitalálja, hogy a GameBoard-ban lévő getCellState(CellLocation) metódusról van szó.
Ha "lambdamentesítjük" a kódot, akkor valahogy így nézne ki: [link] (nem próbáltam ki, úgyhogy ne csodálkozz ha nem jó).





Ezt érdemes lehet átnyálazni.
A visszatérési érték pedig a lambda kifejezés által meghatározott GameBoard implementáció, amelynek egyetlen metódusa CellState-et ad vissza, tehát nézhetne ki valahogy így is:
// anonymous inner class here
return new GameBoard {
˙˙˙˙@Override
˙˙˙˙public CellState getCellState(Field field) {
˙˙˙˙˙˙˙˙Coordinate coord = FIELD_COORDINATE.get(requireNonNull(field));
˙˙˙˙˙˙˙˙switch (lines.get(coord.y).charAt(coord.x)) {
˙˙˙˙˙˙˙˙˙˙˙˙case 'x':
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙return CellState.OCCUPIED_BY_X;
˙˙˙˙˙˙˙˙˙˙˙˙case 'o':
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙return CellState.OCCUPIED_BY_Y;
˙˙˙˙˙˙˙˙˙˙˙˙default:
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙return CellState.EMPTY;
˙˙˙˙˙˙˙˙}
˙˙˙˙}
};
Rávágnék a kezére a kedves költőnek, de ez perpill offtopic. Maradjunk annyiban, hogy ez a fentiek legközelebbi lambdamentes megfelelője.
(Az azért kikívánkozik, hogy Enum.valueOf helyett képes volt a szakembör switch-csel kókányolni, és ez még csak az egyik bűne a sok közül; besírok)





Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!