Über abstrakte Klasse auf eine Klasse zugreifen?

Lybrial

Bekanntes Mitglied
Hallo Leute,

Ich habe hier eine generische ArrayListe mit einer Schnittstelle implementiert:

ArrayListe:
Java:
public class ArrayList<T extends Comparable<T>> extends ArrayListContainer<T>{
	private int mLastIndex;
	private Object[] mArray;
	//*****Konstruktor***********************
	public ArrayList(){
		this(new Object[42]);
	}
	//*****Konstruktor***********************
	public ArrayList(int aSize){
		setArray(new Object[aSize]);
		setLastIndex(0);
	}
	//*****Konstruktor***********************
	public ArrayList(Object[] aArray){
		setArray(aArray);
		setLastIndex(aArray.length);
	}
	//*********************************************************************
	public int quantity(){
		return getLastIndex();
	}
	//*********************************************************************
	public void add(T aObject){
		if(getLastIndex() == getArray().length){
			arrayGrow();
		}
		getArray()[getLastIndex()] = aObject;
		mLastIndex++;
	}
	//*********************************************************************
	public T objectAtIndex(int aIndex){
	    return (T)(getArray()[aIndex]);
	}
	//*********************************************************************
	public boolean addObjectAtIndex(int aIndex, T aObject){
		if(aIndex >= 0 && aIndex <= quantity()){
			if(getLastIndex() == getArray().length){
				arrayGrow();
			}
			for(int i = getLastIndex(); i > aIndex; i--){
				getArray()[i] = getArray()[i-1];
			}
			getArray()[aIndex] = aObject;
			return true;
		}
		else
			return false;
	}
	//*********************************************************************
	public boolean deleteObjectAtIndex(int aIndex){
		if(aIndex >= 0 && aIndex <= quantity()){
			for(int i = aIndex; i < getLastIndex()-1; i++){
				getArray()[i] = getArray()[i+1];
			}
			mLastIndex--;
			getArray()[getLastIndex()] = null;
			return true;
		}
		else
			return false;
	}
	//*********************************************************************
	public int deleteObject(T aObject){
		int count = 0;
		for(int i = 0; i < getArray().length; i++){
			if(getArray()[i] == aObject){
				deleteObjectAtIndex(i);
				count++;
			}
		}
		return count;
	}
	//*********************************************************************
	public boolean isInArray(T aObject){
		for(int i = 0; i < getLastIndex(); i++){
			if(getArray()[i] == aObject){
				return true;
			}
		}
		return false;
	}
	//*********************************************************************
	public void arrayGrow(){
		Object vArray[] = new Object[getArray().length*2];
		for(int i = 0; i < getArray().length; i++){
			vArray[i] = getArray()[i];
		}
		setArray(vArray);
	}
	//*********************************************************************
	public int getLastIndex(){
		return mLastIndex;
	}
	public void setLastIndex(int mLastIndex){
		this.mLastIndex = mLastIndex;
	}
	public Object[] getArray(){
		return mArray;
	}
	public void setArray(Object[] mArray){
		this.mArray = mArray;
	}
}

Schnittstelle:
Java:
public abstract class ArrayListContainer<T>{
	public abstract int quantity();
	public abstract void add(T aObject);
	public abstract T objectAtIndex(int aIndex);
	public abstract boolean addObjectAtIndex(int aIndex, T aObject);
	public abstract boolean deleteObjectAtIndex(int aIndex);
	public abstract int deleteObject(T aObject);
	public abstract boolean isInArray(T aObject);
	public abstract void arrayGrow();
}

Nun zu meiner Frage:
Wie funktioniert es, die ArrayList über den ArrayListContainer anzusprechen?
Das heißt ich möchte nicht direkt eine Instanz von ArrayList erstellen sondern
das eben über den Container laufen lassen?

Grüße
 
Naja, eine Abstrakte Klasse ist normaler weise eine Klasse die Basisfunktionalitäten besitzt, aber selbst nichst instanziiert werden kann. Du musst eine Klasse haben die von der Abstraktenklasse erbt. Diese Klasse kannst du dann instanziieren.
 
Ok dann versteh ich aber nun wieder etwas nicht, habe folgendes mal zum Testen erstellt:

Java:
public class Test{
	public static void main(String[] args){
		Inventory inv = new Inventory();
		ArrayList<String> arrayListName = new ArrayList<String>(inv.getInventoryNames());
		ArrayList<Integer> arrayListPrice = new ArrayList<Integer>(inv.getInventoryPrice());
		ArrayList<Integer> arrayListAmount = new ArrayList<Integer>(inv.getInventoryAmount());
		for(int i = 0; i < arrayListName.getArray().length; i++){
			System.out.print(arrayListName.getArray()[i]);
		}
	}
}

Jetzt ist es so das sich die ArrayList<String> wunderbar erzeugen lässt, er mir aber für die beiden
ArrayList<Integer> anzeigt: "The constructor ArrayList<Integer>(int[]) is undefined"
Die ArrayList habe ich im ersten Beitrag gepostet und eigentlich ist schon ein Konstruktor für Arrays da,
funktioniert ja schließlich mit den Strings.

===========================================================
*solved*
Der Fehler bestand in einer anderen Klasse, nämlich in der Inventory.
Als Rückgabewert für getInventoryPrice und Amount hatte ich int[] und nicht Integer[] 😉
 
Zuletzt bearbeitet:

Zurück
Oben