В java есть ли общий способ обеспечить компиляцию во время компиляции? В соревновании по программированию, в котором я участвую, мы ограничены байтовым кодом, который наш робот может использовать каждый раунд во время работы программы, поэтому, если я могу вычислять вещи во время компиляции, у меня есть преимущество.
Для конкретного примера, допустим, я хочу определить переменную NORTH, которая будет массивом
MapLocations, представляющие квадраты, которые робот может видеть, если смотреть на север. Если я отдам код,
Я могу написать:
public class SightSensor{
public static MapLocation[] NORTH = {new MapLocation(-2,2),
new MapLocation(-1,1),
new MapLocation(-1,2),
new MapLocation(0,1),
new MapLocation(0,2),
new MapLocation(0,3),
new MapLocation(1,1),
new MapLocation(1,2),
new MapLocation(2,2)};
}
, что означает, что робот может видеть все квадраты в 90-градусной дуге относительно севера на расстоянии в квадрат на 9. Теперь мои роботы могут видеть во всех основных направлениях, а некоторые видят дальше
чем другие. Было бы довольно утомительно и, казалось бы, дурным тоном сдавать код каждому возможному
прицел (расстояние, направление) пара. Следовательно, я написал функцию
public static MapLocation[] getSensorLocs(int r, Direction dir){ ... bla ... }
, который автоматически вычисляет местоположения, поэтому я могу переписать класс SightSensor как
public class SightSensor{
public static MapLocation[] NORTH = getSensorLocs(3, Direction.NORTH);
}
Единственная проблема в том, что когда робот пытается использовать переменную NORTH, он должен потратить
время для запуска метода getSensorLocs, так что это дороже, чем рукописная версия.
Могу ли я заставить эти вычисления выполняться во время компиляции, то есть быть «символически замененными» в соответствующем смысле?