2013-04-14 5 views
2

Я смотрел учебник для 2D дизайна игрового движка в вас пробке и есть эта линия:Что делает (Object) в java?

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

Я знаю, что пиксели предполагается содержать целочисленный список цветов для изображения, но я не понимаю, как данные пикселей попали в изображение, так как в учебнике это единственная строка, в которой используются пиксели.

So is (DataBufferInt) означает, что я соединяю пиксели с данными типа DataBufferInt на изображении?

+0

Вы отправляете в DataBufferInt. –

ответ

2

Это называется литье. Объект (который имел другой тип времени выполнения) будет рассматриваться как новый заданный тип.

Скажите, что image.getRaster().getDataBuffer() возвращает тип DataBuffer. Но на самом деле (тип времени исполнения) это DataBufferInt.

Тип DataBuffer не имеет метода getData(), который вернет int[]. Итак, вам нужно сообщить компилятору, что это DataBufferInt, поэтому вы можете получить данные как int[].

Если тип данных времени выполнения отличается, и вы пытаетесь выполнить бросок, вы получите ClassCastException.

+0

Что, в свою очередь, позволяет получить доступ к (доступным) полям и методам нового типа. – afsantos

+1

На самом деле, он лучше имел тот же (или совместимый с назначением) тип времени выполнения, к которому вы пытаетесь его применить. В противном случае вы получите исключение. Тип среды выполнения не может быть изменен. Приведение просто назначает новый тип времени компиляции. – Thilo

+0

@ Тило согласен. Вопрос здесь был в том, что определенная часть кода. Но кастинг иногда неизбежен на практике, особенно если вы используете некоторые низкоуровневые библиотеки, например манипуляции с изображениями. – gaborsch

Смежные вопросы