Future<V> - Arrays erstellbar?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Future - Arrays erstellbar?
Hallo,
ich wuerde gerne wissen, ob (und wenn ja, wie) man Future - Arrays erstellen kann?
Ich habe es bisher auf zwei Arten versucht, die beide nicht funktionieren:

  1. Future<V>[] array =  new (Future<V>[n]);
  2. Future<V>[] array =  (Future<V>[]) new Object[n];

Ich kann noch nachvollziehen, dass 1) nicht funktioniert, da man nicht weiss, welchen Typ das Array zur Laufzeit haben wird. Wieso 2) nicht funktioniert, verstehe ich nicht, da wir so einen Cast doch auch bei den Dynamischen Arrays gemacht haben?


  1. Future<V>[] array = (Future<V>[]) new Future[n]; vlt?

Ansonsten wäre eine Fehlermeldung hilfreich. (V existiert auch?)


Es kommt immer die Fehlermeldung: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.util.concurrent.Future;
Im Code steht Long anstatt V.


Bei Arrays zeigen sich Probleme bei der Art und Weise, wie Java mit Generics umgeht. Ich kenne dafür zwei Lösungen:

  1. Die nicht-typsichere mit Array:
Future[] array = new Future[n];

Hier ist unter Umständen später ein Cast nötig.

  1. Die typsichere mit Listen:
List<Future<V>> list = new ArrayList<Future<V>>();

Ich würde letztere bevorzugen.


Danke, da es um die Bonusaufgabe 2.4 geht, entscheide ich mich fuer die erste Variante.
Mit einem Cast hat das ganze sehr gut geklappt.


Was alternativ auch noch geht ist eine Unterklasse von [m]Future[/m] zu erstellen und dann ein Array dieser Unterklasse. Bringt einem natürlich nichts, wenn man Rückgabewerte von Bibliotheksfunktionen speichern möchte (wie in diesem Fall).

Und warum das alles so komisch ist erfahrt ihr in Übersetzerbau 1.


Das hoere ich nur als Nebenfaechler nicht…


Das musst du als Informatiker auch nicht hören.