Найти элементы наследования в абстрактной коллекции классов - PullRequest
0 голосов
/ 26 марта 2011

У меня есть следующие классы:

public class CollectionCustomClass extends ArrayList<CustomClass>
public abstract class CustomClass
public class SubClass1 extends CustomClass
public class SubClass2 extends CustomClass

и в методе я хочу сделать следующее:

CollectionCustomClass ccc = new CollectionCustomClass();
ccc.add(new SubClass1())
ccc.add(new SubClass2())
ccc.add(new SubClass1())
ccc.add(new SubClass2())

ccc.find(SubClass1)

Результатом будет 2 Подкласс1.1008 * Как мне этого добиться?

Ответы [ 6 ]

0 голосов
/ 27 марта 2011
public <T> CollectionCustomClass find(Class<T> clazz) {
    CollectionCustomClass answer = new CollectionCustomClass();
    for (Entity entity : this) {
        if (entity.getClass() == clazz) {
            answer.add(entity);
        }
    }
    return answer;
}
0 голосов
/ 27 марта 2011

Попробуйте

 ccc.find(SubClass1.class);

и

 class CollectionCustomClass<T> extends ArrayList<CustomClass>{

    public CustomClass find(Class<T> clazz) {
        for(int i=0; i< this.size(); i++)
        {
            CustomClass obj = get(i);
            if(obj.getClass() == clazz)
            {
                return obj;
            }
        }
        return null;
    }
 }
0 голосов
/ 27 марта 2011

вы можете найти метод find в вашем классе коллекции следующим образом:

public int find(String className) {
        int count = 0;
        for(int i=0; i<this.size();i++) {
            if(className == this.get(i).getClass().getName()) {
                count++;
            }
        }
        return count;
    }
0 голосов
/ 27 марта 2011

ArrayList не содержит метод .find (Class).

http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html

Вам необходимо реализовать этот метод в CollectionCustomClass.

В псевдокодеэто может быть что-то вроде этого:

public List CollectionCustomClass.find(CustomClassclazz) {
  List<CustomClass> out = new ArrayList<CustomClass>();

  // Loop through list and use instanceof to add items to out

  return out;

}

Вы также можете применить дженерики к этому методу.

0 голосов
/ 26 марта 2011

Если я вас правильно понимаю, вы можете перебрать ArrayList и сделать следующее сравнение:

if( listName.get(i).getClass() == passedClass ){ //increase count for this class }
0 голосов
/ 26 марта 2011

Если вам нужны элементы точного класса, просто наберите getClass для каждого элемента и сравните с нужным вам классом.

...