У меня есть следующий класс
public class Envirionment {
private Square[][] grid;
public Envirionment(int width, int height) {
this.grid = new Square[height][width];
}
public void map(SquareActor actor) {
for(int y = 0; y < grid.length; y++) {
for(int x = 0; x < grid[y].length; x++) {
actor.act(grid[y][x]);
}
}
}
}
Чтобы проверить, что метод map
работает правильно, я начал создавать тест, цель теста состояла в том, чтобы передать функцию, которая можетдействовать на квадраты и посмотреть, работает ли он правильно.
Одной из основных частей этого теста является проверка того, что он фактически проходит по всем квадратам, поэтому я подумал, что могу передать функцию, которая может связываться с переменными x
и y
цикл, вызов функции обратного вызова со значениями x
и y
и сохранение локального счетчика в тесте для сравнения и контраста.
Я начал с тестирования, чтобы выяснить, могу ли я передатьфункция, которая будет просто выводить переменные x
и y
, но я столкнусь с первым препятствием.
class EnvirionmentTest {
@Test
void test() {
Envirionment env = new Envirionment(10, 10);
env.map((square) -> System.out.println(String.format("%d, %d", x, y)));
fail("Not yet implemented");
}
}
Оказывается, компилятор начал кричать на мои, потому что x
и y
не могутразрешаться в переменную, однако я думал, что они будут привязаны к объему циклов, внутри которых они будут вызываться.
Можно ли установить привязку для этих переменных в Java?Или я подхожу к этой проблеме совершенно неправильно?
edit:
Я только что попробовал что-то похожее в python, и, похоже, оно работает нормально.
test = lambda : print(str(x) + "," str(y))
for y in range(2):
for x in range(2):
test()
вывод:
0,0
1,0
0,1
1,1