【问题标题】:Find inheritance items in abstract class collection在抽象类集合中查找继承项
【发布时间】:2011-03-26 20:52:01
【问题描述】:

我有以下课程:

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。

我怎样才能做到这一点?

【问题讨论】:

    标签: java class collections abstract


    【解决方案1】:

    试试

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

    【讨论】:

    • [code] public CollectionCustomClass find(Class clazz) { CollectionCustomClass answer = new CollectionCustomClass(); for (Entity entity : this) { if (entity.getClass() == clazz){ answer.add(entity); } } 返回答案; } [/code] 你的回答确实只返回了第一个对象,我必须找到所有的对象。
    • 啊!您正在尝试获取 SubClass1 类型的所有项目;错过了。
    • 是的,也无法获取评论代码的格式。感谢您的解决方案:)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:
            public <T> CollectionCustomClass find(Class<T> clazz) {
                CollectionCustomClass answer = new CollectionCustomClass();
                for (Entity entity : this) {
                    if (entity.getClass() == clazz) {
                        answer.add(entity);
                    }
                }
                return answer;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多