# Eigene ArrayList vom Typ Short, Integer oder Double



## redbomber (3. Apr 2009)

Hi zusammen,

habe versucht eine "eigene" ARrayList zu implementieren, welche entweder vom Typ SHort, Integer oder Double ist, je nachdem welchen Typ die Daten besitzen.
Folgende der Code von dem Interface, sowie des IntegerArrays (ShortArray und DoubleArray hab ich weggelassen) 


```
public class ArrayWithoutType {
 
	public interface ArrayNoType<T>
	{
	 public ArrayList<T> getArray();
	 public void setArray(ArrayList<T> list);
	 public void addValue(T val);
	 public void getValue(int pos);
	}
	 
	public class IntegerArray extends ArrayList implements ArrayNoType<Integer>
	{
	    protected ArrayList<Integer> arrayList = new ArrayList<Integer>();
		
	    public ArrayList<Integer> getArray() {
	        return arrayList;
	    }

		@Override
		public void setArray(ArrayList<Integer> list) {
			arrayList = list;
			
		}

		@Override
		public void addValue(Integer val) {
			arrayList.add(val);
		}

		@Override
		public void getValue(int pos) {
			arrayList.get(pos);
		}
	}
}
```

Nun möchte ich in meinem Code eine solche ArrayList anlegen, also bei dem ich den Typ noch nicht kenne, da dieser erst zur Laufzeit bekannt wird.
Ich kann mir jedoch keinen solchen ArrayNoType<T> anlegen.
Geht das etwa garnicht? Bzw. muss ich dies immer wie folgt anlegen?

```
ArrayList<T> array = new ArrayList<Integer>();
```

Dann hätte ich ja aber gar keine Möglichkeit meine ARrays generisch zu implementieren!?


----------



## SlaterB (3. Apr 2009)

es macht wenig Sinn, in einer Klasse von ArrayList zu erben, als auch ein Attribut ArrayList zu enthalten,
wenn du nur dein eigenes Interface ArrayNoType implementieren willst, wozu dann die Oberklasse?


deine Frage ist noch nicht wirklich klar

> Nun möchte ich in meinem Code eine solche ArrayList anlegen

welche Liste, IntegerArray?

IntegerArray  a = new IntegerArray();


----------



## redbomber (3. Apr 2009)

Also ich muss ein File einlesen,
in diesem File steht dann, ob die Daten vom Typ Double,Integer oder short sind.

Ich würde nun gerne den Code so implementieren, dass ich meine ArrayList<T> generisch implementiere,
also dass erst zur Laufzeit bekannt sein muss um welchen Datentyp es sich handelt.
Also würde ich gerne eine ArrayList "ohne" Typ anlegen (geht das überhaupt?)

Die Methoden die ich auf dem Array anwenden muss sind identisch, nur eben der Typ (int,short, double) nicht.



SlaterB hat gesagt.:


> IntegerArray  a = new IntegerArray();


Ja aber wenn ich das so mache, dann müsste ich alle Methoden dreifach implementieren, also je eine für int,short und double

Den Code unten habe ich mir zusammengestellt aus anderen Threads und dachte ich komme so weiter.


----------



## SlaterB (3. Apr 2009)

wenn man den Typ nicht kennt ist Generics meist sinnlos

> dann müsste ich alle Methoden dreifach implementieren, also je eine für int,short und double

entweder du machst das (warum auch immer)
oder du programmierst gar nichts und verwendest ArrayList<T>

oder du definierst dir eine neue Klasse MyArrayList<T>, die in etwa so wie ArrayList<T> aussieht, falls du eine eigene Klasse haben willst


----------



## Ebenius (3. Apr 2009)

redbomber hat gesagt.:


> Ich würde nun gerne den Code so implementieren, dass ich meine ArrayList<T> generisch implementiere, also dass erst zur Laufzeit bekannt sein muss um welchen Datentyp es sich handelt.


Generics existieren nur zur Compile-Time. Sie ergeben zur Laufzeit auch keinen Sinn, da der Sinn der Generics der ist, zur Compile-Time Typen prüfen zu können.

Stichwort "Type Erasure".

Ebenius


----------

