Wie caste ich ein Objekt der einen in eine andere Klasse



  • Hallo,

    ich portiere eine Anwendung auf Android und muss für zwei (selbstgeschriebene) Klassen DataBufferByte und DataBufferInt ein byte- in ein int-Array casten:

    this.data = ((DataBufferInt)this.getBufferedImage().getRaster().getDataBuffer()).getData();
    

    Beide Klassen DataBufferInt und DataBufferByte haben jeweils eine Funktion getData() jeweils als Rückgabewert einmal byte[] und int[]. Überladen funktioniert ja nur mit der Signatur, nicht mit den Rückgabeparametern, was muss ich also tun?

    Vielen Dank vorab



  • IMHO geht solch ein Cast gar nicht.
    also sowas:

    int[] ints = {1,2,3,4,5,6};
    byte[] byte= (byte[])ints;
    

    Ein Array ist ja nichts mehr als hintereinander adressierter Speicher.
    int wäre aber 4 Byte lang. Ein Array aus 6 ints ist also gesamt 4x6=24 Bytes lang
    ein Array aus 6 Bytes wäre nur 6 Byte lang. Ein Cast sagt dem Compilier ja nichts weiter als das er die Daten anders interpretieren soll. Das einzige was mir einfällt, die Arrays von Hand umkopieren und jeden Wert einzeln Casten, ggf gibts dafür aber schon was vorgegebenes.





  • ich nehm mal an sein problem ist das bei einem cast alle bytes über 127 negativ sind 😉

    liegt daran das alle primitiven typen in java signed sind

    beim cast einfach ein & 0xff anhängen

    int i = (int)b & 0xff; // b ist das byte
    

    hoffe mal das geht. alternativ gibt es aber eventuell schon irgendeine utils klasse für primitive datentypen



  • sorry, ich hab mich vielleicht nicht ganz präzise ausgedrückt. Die Konvertierung von byte nach int bekomme ich hin, mir ging es eher darum, der Klasse beizubringen, dass bei einem byte[] getdata() nach int[] getData gecastet wird. Also, was muss ich in der Klasse vereinbaren/überschreiben/machen, damit der Cast überhaupt möglich ist?



  • das wurde dir doch schon weiter oben erklärt?

    ein cast ist nicht möglich. du brauchst ein neues array gleicher größe.


Anmelden zum Antworten