blog.wlami.com

Virtuelles Zuhause von Wladislaw Mitzel

Wie castet man in Java char[] zu Object[]?

Kurz: gar nicht. Wenn Ihr trotzdem eine Lösung haben wollt müsst Ihr weiterlesen.

Bei einem kleinen Projekt, welches ich zwischendurch mache, verwende ich Java Reflection um mit Objekten zu arbeiten. An einer Stelle habe ich ein Object, welches eigentlich ein Array ist; und zu solch einem möchte ich es casten:

1
2
3
4
5
6
Class c = object.getClass();
try {
  if (c.isArray()) {
      Object[] array = (Object[])object;       
      for (Object object : array) {
          //Spannende Sachen mit Reflection machen       

Und eigentlich funktioniert das Ganze auch ganz gut, bis man auf die Idee kommt ein Array aus primitiven Datentypen zu verwenden. Genau das trat bei mir auf und so erhielt ich folgende Exception:

1
java.lang.ClassCastException: [C cannot be cast to [Ljava.lang.Object;

Die Recherche einer Lösung war ernüchternd: In Java kann mann ein Array mit primitiven Datentypen nicht zu einem Object[] casten. An dieser Stelle kommen komplexe Work-arounds ins Spiel, wobei man jedoch jeden primitiven Datentyp einzeln behandeln muss. Stefan hatte dann einen genialen Einfall: einfach groovy benutzen! Und tatsächlich ist es spielend einfach das Problem zu lösen:

1
2
3
public static Object[] convert(Object o) {
  return (Object[])o;
}  

Richtig, eigentlich machen wir das gleiche wie auch schon mit Java, wir casten das Object zu einem Object[]. Doch groovy vermag, wozu Java nicht im Stande ist. Und wieder habe ich diese Gefühl, dass die JVM fantastisch ist, Java aber längst nicht das ganze Potential ausnutzt.

An dieser Stelle noch ein Mal ein Danke an Stefan!

Kommentieren

Dieses Blog verwendet statische Kommentare. Kommentare werden also per Mail an mich geschickt und erscheinen anschließend im Blog. Eure E-Mail-Adresse wird nicht veröffentlicht.

Kommentar schreiben