Sto cercando di scrivere un metodo per restituire tutti gli oggetti che corrispondono alla classe ottiene come parametro:instanceof Classe <?> parametro
public class Scenario extends View {
...
private Actor[] actors = new Actor[1024];
...
public Actor[] getActors(Class<?> cls) {
//Count actors corresponding to class cls
int cnt = 0;
for (int i = 0; i<actorsCount; i++)
if (actors[i] instanceof cls) cnt++;
//Build a new array;
Actor[] clsActors = new Actor[cnt];
//Fill it
for (int j = 0, k=0; j<cnt; k++)
if (actors[k] instanceof cls)
clsActors[j++] = actors[k];
return clsActors;
}
}
Tuttavia, sto ottenendo un errore: "- operando incompatibile tipi booleano e Classe
'attore' viene esteso dai miei sprite, dicono Uccello, eroe, ecc L'idea è, per esempio, per ottenere un elenco di tutte Uccelli sullo scenario in un dato momento per alcuni calcoli.
Qualche idea di cosa sta succedendo qui? Come testare se un dato oggetto è un'istanza di una data classe?
Grazie mille per aver trovato il tempo di scrivere un esempio. –
Prego! Se si utilizza questo esempio nel codice di produzione, tuttavia, penserei di utilizzare un elenco come tipo di ritorno o variabile temporanea perché è facile fare errori con gli indici del ciclo. –
Sembra davvero più elegante usando le collezioni come dici tu, in realtà l'intera meccanica di Scenario ha funzionato usando le raccolte prima. * L'ho reso brutto *, perché le Collezioni assegnano roba (Iterator) e ho bisogno di questo array di attori per un ciclo di rendering. Ho finito di implementarlo ormai e mi sono sbarazzato di tonnellate di eventi GC_FOR_MALLOC. È un peccato perché il codice ha un aspetto magnifico usando ArrayLists ... (Non l'ho menzionato prima, ma questa è un'app per Android, così mirata ai dispositivi con specifiche basse) –