在抽象类集合中查找继承项

时间:2011-03-26 20:52:02

标签: java class collections abstract

我有以下课程:

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 Subclass1。

我怎样才能实现这个目标?

6 个答案:

答案 0 :(得分:0)

如果您想要确切类别的项目,只需在每个项目上调用getClass,然后与您想要的课程进行比较。

答案 1 :(得分:0)

如果我理解正确,你可以遍历ArrayList并进行以下比较:

if( listName.get(i).getClass() == passedClass ){ //increase count for this class }

答案 2 :(得分:0)

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;

}

您也可以将泛型应用于此方法。

答案 3 :(得分:0)

你可以在你的集合类中找到像这样的方法

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;
    }

答案 4 :(得分:0)

尝试

 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;
    }
 }

答案 5 :(得分:0)

public <T> CollectionCustomClass find(Class<T> clazz) {
    CollectionCustomClass answer = new CollectionCustomClass();
    for (Entity entity : this) {
        if (entity.getClass() == clazz) {
            answer.add(entity);
        }
    }
    return answer;
}