Factory für generische Arrays

limago

Erfahrenes Mitglied
Ich möchte eine Methode in einer generische Klasse schreiben, die eine Referenz auf ein gefülltes Array zurück gibt. Ich verwende Java 17 und habe es mit Oracle JDK und temurin versucht. Hier der Democode:
Java:
public class Demo<T>{

    private final T[] data;

    public Demo() {
       data = (T[]) new Object[10];
    }

    public void put(int index, T value) {
        data[index] = value;
    }

    public T get(int index) {
        return data[index];
    }
}

und hier der funktionierene Code in "main"

Java:
public class Main {
    public static void main(String[] args) throws Exception{

        Demo<Integer> demo = new Demo<>();
        demo.put(2, 3);
        System.out.println(demo.get(2));
    }
}

Ändert man Demo wie folgt:

Java:
public class Demo<T>{

    private final T[] data;

    public Demo() {
       data = (T[]) new Object[10];
    }

   public T[] create () {
        return data;
   }


}


und main in :
Java:
public class Main {
    public static void main(String[] args) throws Exception{

        Demo<Integer> demo = new Demo<>();

        Integer[] feld = demo.create();
    }
}

führt dies zu einem Laufzeitfehler:
Exception in thread "main" java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.Integer; ([Ljava.lang.Object; and [Ljava.lang.Integer; are in module java.base of loader 'bootstrap')
at main.Main.main(Main.java:11)

Der Cast innerhalb der Klasse funktioniert, auf der Consumentenseite jedoch nicht.

Ich könnte das Problem mit einem zusätzlichen Supplier oder dem Trennen des Erzeugen und Füllen des Arrays lösen. Aber vielleicht weiß jemand von Euch ob es eine Weg gibt das Array zu Erstellen/Casten oder weiß warum das nicht geht.

--------------------------------
Edit: Es gibt wohl keine Lösung für das Problem. Oracle schreibt folgendes dazu
Hinweis von Oracle
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück