Frage

Ich habe versucht, die Arraylist-Klasse ohne viel Erfolg zu verlängern. Ich möchte es erweitern, und in der Lage, es zu parametrieren.

So brauchen Sie normalerweise so etwas wie

ArrayList<SomeObject> list = new ArrayList<SomeObject>();

Ich will

MyList<SomeObject> list = new MyList<SomeObject>();

Einfach erstreckt Arraylist funktioniert nicht.

public class MyList extends ArrayList ...

Die, wenn ich versuche, es zu benutzen ich die Fehler

  

Der Typ MyList ist nicht generisch; es   kann nicht mit Argumenten zu parametrieren   

Ich habe versucht, Variationen

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>

ohne Erfolg, wenn ich die subobject hinter dem Klassennamen verwenden, es scheint zu funktionieren, aber versteckt Methoden in der subobject Klasse aus irgendeinem Grunde.

Alle Gedanken oder Vorschläge, wie diese Arbeit richtig zu machen sind willkommen.

War es hilfreich?

Lösung

Sie benötigen einen Typ für den Typ-Parameter angeben, die ArrayList. Für generische Typparameter ist T ziemlich häufig. Da der Compiler nicht weiß, was ein T ist, benötigen Sie einen Typ-Parameter hinzufügen, dass MyList die Art bestanden haben kann somit erhalten Sie:.

public class MyList<T> extends ArrayList<T>

Darüber hinaus können Sie prüfen, List Umsetzung und zu einer ArrayList delegieren, anstatt von ArrayList vererben. "Objekt-Komposition über Klassenvererbung Favor. [ Design Patterns pg. 20]"

Andere Tipps

public class MyList<T> 
    extends ArrayList<T>
{
}

MyList<SomeObject> list = new MyList<SomeObject>();

oder

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();

Sie sollten nicht Arraylist erweitern, erweitern AbstractList statt:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top