我有以下课程:
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。
我怎样才能实现这个目标?
答案 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;
}