2013-04-14 2 views
2

J'ai regardé un tutoriel pour la conception du moteur de jeu 2D en vous tube et il y a cette ligne:Que fait (Object) en java?

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

Je sais que les pixels est censé contenir la liste entière de couleurs pour l'image mais je ne comprends pas comment les données des pixels sont entrées dans l'image puisque dans le tutoriel c'est la seule ligne où les pixels sont utilisés.

Est-ce que (DataBufferInt) signifie que je connecte des pixels aux données de type DataBufferInt dans l'image?

+0

Vous diffusez du contenu vers DataBufferInt. –

Répondre

2

Il est appelé coulée. L'objet (qui avait un type d'exécution différent) sera considéré comme le nouveau type donné.

Dites que image.getRaster().getDataBuffer() renvoie un type DataBuffer. Mais en réalité (le type d'exécution) c'est DataBufferInt.

Votre type DataBuffer n'a pas de méthode getData(), qui renvoie int[]. Donc, vous devez dire au compilateur que c'est un DataBufferInt, de sorte que vous pouvez obtenir les données comme int[].

Si le type de données d'exécution est différent et que vous essayez de diffuser, vous obtiendrez un ClassCastException.

+0

Qui, à son tour, permet l'accès aux champs (accessibles) et aux méthodes du nouveau type. – afsantos

+1

En fait, il vaut mieux avoir le même type d'exécution (ou un type d'exécutable compatible) que vous essayez de convertir. Sinon, vous obtiendrez une exception. Le type d'exécution d'un objet ne peut pas être modifié. Le casting assigne juste un nouveau type de compilation. – Thilo

+0

@Thilo Je suis d'accord. La question ici portait sur ce morceau de code. Mais le casting est parfois inévitable en pratique, surtout si vous utilisez des bibliothèques de bas niveau, comme la manipulation d'images. – gaborsch