2015-02-26 4 views
6

Ich habe eine Menge Suche nach generischen Typ Fragen getan und habe einfach nichts gefunden, was mir geholfen hat herauszufinden, was ich hier falsch mache. Ich habe eine Schnittstelle wie folgt:Behalten generische Typen bei der Implementierung in Klasse

public interface SortAnalysis<E extends Comparable<? super E>> 
{ 
    public long analyzeSort(ArrayList<E> list); 
} 

Jetzt ist der nächste Schritt macht eine Klasse, die diese Schnittstelle implementiert. Diese besondere Klasse wird eine Einführungs Art verwenden, und ich brauche die Arraylist-Typ ‚E‘ generisch zu halten, so habe ich versucht, alle möglichen Dinge und am Ende mit den folgenden:

public class InsertionSort<E extends Comparable<? super E>> implements SortAnalysis { 

@Override 
public long analyzeSort(ArrayList list) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

Mein Problem ist, dass, wenn ich versuchen Sie dies für den Parameter

der Compiler meckert mich über die Implementierung einer Supertype-Methode.

Ich würde wirklich jede Richtung der Hilfe schätzen. Danke!

** Ich kann dies noch nicht als beantwortet markieren, aber es ist. Ich glaube, mein Problem war, dass, wenn ich

SortAnalysis<E> 

hatte ich nicht die generische Typisierung nach dem Klassennamen aufgelistet haben. **

+3

Im zweiten Code-Snippet sollte es 'SortAnalysis ' und 'ArrayList ' sein. –

+0

Danke. Lief wie am Schnürchen. Ich dachte mir sicher, dass ich das schon ausprobiert habe, aber es könnte sein, bevor ich das > nach dem InsertionSort hinzugefügt habe. – sebe

Antwort

3

den Typ angeben wie SortAnalysis<E> in

public class InsertionSort<E extends Comparable<? super E>> 
     implements SortAnalysis<E> { 

wenn Sie lassen es weg, Sie haben eine raw-type und keine generische Version.

+0

Danke Elliott - Wie ich in einem obigen Kommentar erwähnt hatte, dass mir jemand das Gleiche sagte, war ich mir sicher, dass ich das bereits versucht hatte und verblüfft war, als es nicht funktionierte. Ich frage mich, ob ich alle > nach InsertionSort zu der Zeit vermisst hatte. – sebe

3

Wenn Sie Ihre Klasse InsertionSort deklarieren, implementieren Sie das rohe Formular der Klasse SortAnalysis. Das bedeutet, dass analyzeSortSortAnalysis nicht ordnungsgemäß überschreibt, wenn Sie <E> auf dem Parameter list einschließen.

Geben Sie einen Typparameter im implements-Klausel ein.

class InsertionSort<E extends Comparable<? super E>> 
    implements SortAnalysis<E> { 
//       ^^^ 

Jetzt können Sie <E> im list Parameter umfassen.

Verwandte Themen