2011-03-26 39 views
0

我有以下類別:查找抽象類集合繼承項目

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

嘗試

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

[代碼]公共 CollectionCustomClass找到(類clazz){ \t CollectionCustomClass answer = new CollectionCustomClass(); \t爲(實體實體:本){ \t \t如果(entity.getClass()== clazz所){ \t \t \t answer.add(實體); \t \t} \t \t} return answer; } [/ code] 你的答案只返回第一個對象,我不得不找到所有的對象。 – 2011-03-26 22:06:53

+0

啊!您正試圖獲取SubClass1類型的所有項目;錯過了。 – 2011-03-26 22:08:29

+0

是的,無法獲得評論代碼的格式。感謝您的解決方案:) – 2011-03-26 22:09:23

0

如果您想要確切的課程的項目,只需在每個項目上調用getClass並與您想要的課程進行比較。

0

如果我理解正確的話,您可以通過迭代ArrayList中,做以下對比:

if(listName.get(i).getClass() == passedClass){ //increase count for this class } 
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; 

} 

您也可以申請仿製藥這種方法。

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