ArrayList<MyObj> toKill = new ArrayList<MyObj>();
for(MyObj o : container) {
if (o instanceof MyDerObj) {
MyObj der = (MyDerObj) o;
toKill.add(chip);
}
}
Есть ли способ итерировать только по обьектам определенного класса?
Код:
java.util.Enumeration в помощь
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Iterable.html
ну и соответствующий итератор
для это дела лучше
ну и соответствующий итератор
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Iterable.html
ну и соответствующий итератор[/QUOTE]
Я так сразу и подумал сделать, но только там же метод iterator() надо реализовывать. А у меня в иерархии довольно много классов, все от одного базового и хранятся в одном списке с ссылками на базовый класс. А хочется иногда без лишних инстансофоф пробежать список по оперделенным подклассам. Мне нужно передавать по какому конкретно классу хочу пробежаться, а методу iterator() это передать некуда. Может есть какой стандартный механизм? Ведь в джаве без обобщенных классов все время были контейнеры Object, и такая ситуация встречалась оч часто.
[QUOTE=<SCORP>;282751]для это дела лучше
ну и соответствующий итератор[/QUOTE]
Я так сразу и подумал сделать, но только там же метод iterator() надо реализовывать. А у меня в иерархии довольно много классов, все от одного базового и хранятся в одном списке с ссылками на базовый класс. А хочется иногда без лишних инстансофоф пробежать список по оперделенным подклассам. Мне нужно передавать по какому конкретно классу хочу пробежаться, а методу iterator() это передать некуда. Может есть какой стандартный механизм? Ведь в джаве без обобщенных классов все время были контейнеры Object, и такая ситуация встречалась оч часто.
Цитата: Goblin
Дык напиши сам.
java.util.Enumeration в помощь
java.util.Enumeration в помощь
Так как раз и не хочу сам писать - вдруг уже есть что то стандартное. Я с джавером совсем недавно устроился, не хочу писать нубские велосипеды^^
Посмотрел Enumeration - то же самое что и с Itarable (см. выше).
по идее можно попробовать сделать что-то типа ClassFilterIterator<? Class> с конструктором ClassFilterIterator(Iterator). а next() у него будет проверять элемент на instanceof и возврящать, если надо, или скипать
Ну да, я типо того и сделаю. Просто решил перед этим спросить, а то опасался что сделаю, начну юзать а потом узнаю что это уже есть. А потом придут еще люди в проэкт и будут мои велосипеды гонять)))
Я наверно сделаю так:
Iterator<Class> getIterator(Class class) {...}
P.S. Если вдруг кто знает что такая тема уже есть, напишите плиз)))
Iterator i = new ClassFilterIterator<MyClass>(myList.iterator());
а если делать Iterator<Class> getIterator(Class class), то прийдётся порождать подкласс от списка и потом его пользовать. что есть в общем-то не весело. вот вы сейчас ArrayList пользуете, а решите потом на LinkedList пересесть. а у него нетути такого фильтрующего итератора - придётся писать ;)
как вариант - вынести этот метод куда-нить и сделать статическим и ещё параметр добавить Collection или Iterator, чтобы реюзать можно было удобней