遍历不同对象的 ArrayList

Iterating through an ArrayList of different objects

我有一个摘要 class 有几个子class。测试器 class 有一个 ArrayList,其中每个子 class 有 1 个对象。它们每个都有一个同名的方法,我如何遍历 ArrayList 并为每个对象调用该方法?

我的一个子class(其他基本一样):

public class MyMath extends Homework {
private int pagesRead;
private String typeHomework;

public MyMath(int pagesRead, String typeHomework) {
    super(pagesRead, typeHomework);
}

public void createAssignment(int p) {
    setPagesRead(p);
    setTypeHomework(typeHomework);
}

public void toString(int pagesRead, String typeHomework) {
    System.out.println("Homework type: " + typeHomework + ". Number of pages read: " + pagesRead + ".");
}

}

在我的测试器中 class 主要方法:

ArrayList homework = new ArrayList();
homework.add(new MyMath(5, "Math"));
homework.add(new MyScience(5, "Science"));
homework.add(new MyEnglish(5, "English"));
homework.add(new MyJava(5, "Java"));

好吧,如果方法在您的摘要中指定 class,并且您已经构建了包含其中所有对象的 ArrayList,您应该能够简单地遍历 ArrayList(for 循环)只需调用 .method()

如果你的 ArrayList 是类型并且你的接口也有方法那么你可以这样调用它们

for(int i = 0; i < list.length();i++)
{
    list[i].METHOD_NAME();
}

您可以遍历它包含对象的 arraylist ant,并且可以调用该对象的方法。例如,

ArrayList<AbstractClass1> objs = new ArrayList<AbstractClass1>();

objs.add(); // you have added objects already.

然后

for(int i = 0; i< objs.size() ; i++){

objs.get(i).methodYouDefined();

}

如果您尚未在 class 中介绍泛型,则必须手动进行转换。如果你已经了解了泛型,你应该使用它们!见 lak91 的回答。

public abstract class AbstractTest
{
   public abstract void oneTwo( int i, String s );

   public static void main(String[] args) {
      List list = new ArrayList();
      list.add( new One() );
      list.add( new Two() );
      for( Object test : list ) {
         AbstractTest abTest = (AbstractTest) test;
         abTest.oneTwo( 0, "test" );
      }
   }

}

class One extends AbstractTest {

   @Override
   public void oneTwo( int i, String s )
   {
      System.out.println("One");
   }

}

class Two extends AbstractTest {

   @Override
   public void oneTwo( int i, String s )
   {
      System.out.println("Two");
   }

}