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;
}
};
있습니다. (아마도 이것이 내가 자바에 새로운 해요?이 작업을 수행하는 잘못된 방법입니다.) 자,이 코드에서 루프 내에서
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도 SOUR도 아닌 경우) –
네일, 죄송합니다. 코드를 단순화하려고 시도 했으므로 반환 값이없는 경로가 있기 때문에 getLocs에서 else 문이 필요합니다. 바이트 코드로 측정. – andyInCambridge