2013-04-14 5 views
2

난 당신 튜브에 2D 게임 엔진 디자인에 대한 자습서를 지켜이 라인이 :(Object)는 java에서 무엇을합니까?

private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); 

나는 픽셀 이미지의 색상의 정수 목록을 포함하도록되어 있음을 알고 있지만 내가 이해가 안 돼요은 튜토리얼에서는 픽셀이 사용되는 유일한 선이므로 픽셀의 데이터가 이미지에 포함됩니다.

그래서 (DataBufferInt)는 픽셀을 이미지의 DataBufferInt 유형의 데이터에 연결한다는 의미입니까?

+0

DataBufferInt로 전송 중입니다. –

답변

2

캐스팅이라고합니다. 오브젝트 (실행시의 형태가 다른 오브젝트)는 새로운 지정된 형태로서 간주됩니다.

라고 말하면 image.getRaster().getDataBuffer()DataBuffer을 반환합니다. 그러나 실제로 (런타임 유형) DataBufferInt입니다.

DataBuffer 유형에 getData() 메서드가 없으므로 int[]이 반환됩니다. 따라서 은 컴파일러DataBufferInt임을 알리기 위해 데이터를 int[]으로 가져올 수 있습니다.

런타임 데이터 형식이 다른 경우 캐스팅을 시도하면 ClassCastException이 표시됩니다.

+0

차례로 새로운 유형의 필드와 메소드에 액세스 할 수 있습니다. – afsantos

+1

사실, 더 나은 (또는 할당과 호환되는) 런타임 유형을 캐스팅하려고하는 것이 좋습니다. 그렇지 않으면 예외가 발생합니다. 오브젝트의 런타임 유형을 변경할 수 없습니다. 캐스트는 단지 새로운 컴파일 타임 타입을 할당합니다. – Thilo

+0

@Thilo 동의합니다. 여기에있는 질문은 특정 코드에 관한 것입니다. 그러나 실제로는 캐스팅이 불가 피한 경우가 있습니다. 특히 이미지 조작과 같은 저수준 라이브러리를 사용하는 경우 특히 그렇습니다. – gaborsch

관련 문제