Próbuję napisać metodę, aby powrócić wszystkie obiekty, które pasują do klasy to dostaje jako parametr:instancją klasy <?> parametr
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;
}
}
Jednak dostaję błąd: „- Incompatible operand typy logiczna i klasy
«Aktor»zostaje przedłużony o moich duszków, powiedzmy Ptak, bohater, itp pomysł jest, na przykład, aby uzyskać listę wszystkich Birds on the Scenario w danym czasie dla niektórych obliczeń.
Czy masz pojęcie, co się tutaj dzieje? Jak sprawdzić, czy dany obiekt jest instancją danej klasy?
Dziękuję bardzo za poświęcenie czasu na napisanie przykładu. –
Nie ma za co! Jeśli użyjesz tego przykładu w kodzie produkcyjnym, pomyślałbym o używaniu listy jako typu zwrotnego lub zmiennej tymczasowej, ponieważ łatwo jest popełniać błędy za pomocą indeksów pętli. –
Rzeczywiście wygląda bardziej elegancko przy użyciu kolekcji, jak mówisz, w rzeczywistości cały mechanik scenariusz pracował wcześniej przy użyciu kolekcji. * Zrobiłem to brzydko *, ponieważ Kolekcje alokują rzeczy (Iteratory) i potrzebuję tych tablic aktorów dla pętli renderowania. Skończyłem już to wdrażanie i pozbyłem się ton zdarzeń GC_FOR_MALLOC. Szkoda, bo kod świetnie wyglądał przy użyciu ArrayLists ... (Nie wspominałem o tym wcześniej, ale jest to aplikacja dla systemu Android, która jest przeznaczona dla urządzeń o niskiej specyfikacji) –