No, perché il problema è proprio in cosa è stato "reificato" (termine strano che indica cosa è rappresentato a runtime) nell'array.Originariamente inviato da Hysoka
PolarPoint [] subsetBorderA = Utilities.arrayRange(bordersA,mA);
ovviamente bordersA è di tipo PolarPoint[].
Ecco il problema: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lmelecon.algorithm.xmath.PolarPoint;
Perché a compilation-time nessuna lamentela, ma a run-time questa?!?! Neanche mettendo un cast esplicito a PolarPoint[] riesco ad arginare il problema.
L'array l'hai istanziato di Object, è "reificato" il tipo Object.
Nella tua riga
PolarPoint [] subsetBorderA = Utilities.arrayRange(bordersA,mA);
Il compilatore sotto-sotto per il valore di ritorno ci infila un cast a PolarPoint[] (perché arrayRange ritorna T[]).
PolarPoint [] subsetBorderA = (PolarPoint[]) Utilities.arrayRange(bordersA,mA);
Ma se l'array è realmente un Object[] .... non può essere un PolarPoint[] e non può essere convertito a questo!!!
Hai presente le collezioni come es. LinkedList che hanno (vedi javadoc) questi due metodi?
Object[] toArray()
<T> T[] toArray(T[] a)
Il primo fa proprio quello che hai fatto tu (istanzia un Object[]) ma lo rende chiaro mettendo come tipo di ritorno Object[]. Un metodo così serve solo quando non ti importa davvero tanto di che tipo è l'array (se è Object[]) ma ti importa solo degli oggetti contenuti.
Se ti interessa il tipo dell'array, con le collezioni devi usare il secondo metodo. Ma questo metodo non istanzia un Object[]! L'unico modo per istanziare un array del giusto tipo è quello di ricevere un array (infatti ha il parametro) e usare la "reflection" di Java per istanziare dinamicamente l'array "copiando" il tipo.
Ti suggerisco di guardare il sorgente di LinkedList per quel secondo toArray. Oltre a trovare la soluzione lo troverai "istruttivo" ...![]()

Rispondi quotando