【发布时间】:2012-02-01 15:16:48
【问题描述】:
在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 方法的时间,因此它比手写版本更昂贵。 我可以强制该计算在编译时运行,即在适当的意义上被“符号替换”吗?
【问题讨论】:
-
我认为您正在寻找一个编译时预处理器,类似于 C 中的那个?
-
是的,这就是我所希望的。
标签: java bytecode compile-time