# ArrayList



## wpb (21. Oktober 2008)

Hallo!

Ich hab da mal eine Frage, und hoffe, dass sich das Problem irgendwie
lösen lässt. Von selber bin ich leider nicht frauf gekommen....

Also ich habe eine Methode der IRGENEINE ArrayList übergeben wird. 
In meinem Programm gibt es mehrere ArrayList "Arten"
also z.b.: ArrayList<A> ; ArrayList<B> usw.

Ich ruf jetz also die Methode mit irgendeiner ArrayList auf (z.B. mit <B>)
Ich möcht dann in der Methode, der ich ein ArrayList übergeben kann, feststellen, um welche "Art" es sich nun handelt. (A oder B oder C usw.)

Ist das irgendwie möglich, oder muss ich jeweils für A, B C usw. immer eine eigene Methode imglementieren.

Ich würds ger so machen: public void methode(ArrayList list) {}
Und dann den Aufruf so: methode(list); 
Wobei list ArrayList<A> list = new ArrayList<A> entspricht.

Danke schon mal.


----------



## MAN (21. Oktober 2008)

Hallo wpb,

hier ein Ansatz, wie man es machen könnte. Habe mal statt der Klassen A und B die Klasse Integer und String benutzt:


```
import java.util.ArrayList;

public class UntypedArrayList {
   public static void main(String[] args) {
      ArrayList<Integer> listA = new ArrayList<Integer>();
      ArrayList<String> listB = new ArrayList<String>();

      listA.add(1234);
      listB.add("test");
      
      method(listA);
      method(listB);
   }

   private static void method(ArrayList<?> list) {
      Object listElem = list.get(0);

      if(listElem != null) {
         if(listElem instanceof Integer) {
            // do something with Integer-ArrayList
         } else if(listElem instanceof String ) {
            // do something with String-ArrayList
         }
      }
   }
}
```

Jedoch sollte man sich hier überlegen, ob es nicht mit einer abstrakten Klasse sinnvoller und sauberer zu gestalten ist.

Eine Möglichkeit wäre folgende:


```
// abstract Class AbstractArrayList
public abstract class AbstractArrayList<T> extends ArrayList<T> {
   public abstract void method();
}

// Class IntegerArrayList
public class IntegerArrayList extends AbstractArrayList<Integer> {
   public void method() {
      // do something with Intger-ArrayList
   }
}

// Class StringArrayList
public class StringArrayList extends AbstractArrayList<String> {
   public void method() {
      // do something with String-ArrayList
   }
}

// Class UntypedArrayList (Main)
import java.util.ArrayList;

public class UntypedArrayList {
   public static void main(String[] args) {
      IntegerArrayList listA = new IntegerArrayList();
      StringArrayList listB = new StringArrayList();

      listA.add(1234);
      listB.add("test");
      
      listA.method();
      listB.method();
   }
}
```

Viele Grüße,
MAN


----------

