私はjavaでコンパイルと実行時の計算を理解しようとしています。私は私が方向性と MapLocationsの配列との間に一定のマッピングを定義する、すなわち次 列挙javaコンパイルと実行時の計算
public enum SightSensor{
NORTH (new MapLocation[]{new MapLocation(0,1),
new MapLocation(0,2),
new MapLocation(0,3)}),
SOUTH (new MapLocation[]{new MapLocation(0,-1),
new MapLocation(0,-2),
new MapLocation(0,-3)});
private final MapLocation[] locs;
SightSensor(MapLocation[] locs){
this.locs = locs;
}
public static MapLocation[] getLocs(Direction dir){
if (dir == Direction.NORTH)
return NORTH.locs;
if (dir == Direction.SOUTH)
return SOUTH.locs;
}
};
を持っています。 (おそらくこれは、私は、Javaに新たなんだ?これを行うには間違った方法である。)さて、私はコード内のループ内
MapLocation[] locs = SightSensor.getLocs(Direction.SOUTH_WEST);
を書く 場合、私はコストがオーバーヘッド最初の時間があることがわかりますコード が呼び出され、実行時に何とか計算/インスタンス化されていることを意味します。私はちょうど直接
MapLocation[] locs = new MapLocation[]{new MapLocation(0,1),
new MapLocation(0,2),
new MapLocation(0,3)};
をコーディングする代わりに 場合は何もコストのオーバーヘッドはありません。私はその違いを理解していない。コンパイラはjust-in-time計算の奇妙な種類の を実行しますか?
コストオーバーヘッドをどのように測定しているか説明できますか? –
また、あなたの例はコンパイルされません。 ( 'dir'がNORTHでもSOUTHでもないとき) –
爪、申し訳ありませんが、コードを簡素化しようとしました。これは' getLocs'に何らかのelse文が必要です。バイトコードでの測定。 – andyInCambridge