2016-10-25 1 views
1

Ich habe einige Lesen auf Wildcards in Java, aber ich kann nicht herausfinden, wie Sie eine Wildcard-Typ einer Sammlung in der Implementierung einer Schnittstelle Methode Deklaration auflösen würde. Sie können den Typ technisch ermitteln, indem Sie eines der Objekte in der Sammlung untersuchen, aber das Auflösen des Typs in der Sammlung nicht zulassen. Dies schlägt fehl, wenn die Sammlung leer ist.Auflösen Wildcard-Typ in @Override Implementierung einer Schnittstelle

Gibt es eine geeignete Methode, die mir nicht bewusst ist?

+0

Nein, Löschung aufgrund geben, gibt es keine Möglichkeit, den ursprünglichen Typen zur Laufzeit zu erholen. Selbst Ihr Vorschlag wird nicht funktionieren, weil eine 'Liste ' sehr wohl einen 'String' als erstes Element und ein' Integer' als zweites haben könnte. –

+0

@TavianBarnes Guter Punkt, ich machte eine schlechte Annahme dort. – nukeforum

Antwort

3

Wenn Ihre Methode mit Generics arbeiten soll, sollte sie in der Signatur oder in der Klassen-/Schnittstellendefinition definiert werden.

public interface SomeInterface<T> { 
    void addAThing(T thing); 
    void addAListOfThings(Collection<T> things); 
} 

Und die implementierende Klasse, generischen Typ Foo:

public class SomeInterfaceImplementation implements SomeInterface<Foo> { 

    @Override 
    public void addAThing(Foo thing) { 
     // thing is of type Foo 
    } 

    @Override 
    public void addAListOfThings(Collection<Foo> things) { 
     // things is a collection of Foo 
    } 
} 
+0

Ich fühle mich ein bisschen albern. Ich habe das in der Vergangenheit gesehen, aber aus irgendeinem Grund habe ich nicht erkannt, dass ich es in diesem speziellen Fall verwenden könnte. – nukeforum

+0

Schön. Hat mich mit einem exakten Dupe um 60 Sekunden überfallen. –

Verwandte Themen