T extends Vergleichbar<T>

Habe ich die folgende Klasse.

class MyClass<T>

Verwendet er den folgenden Konstruktor.

MyClass(Comparator<T> comparator, Collection<? extends T> data)

Und es hat ein Feld, welches sich in den Konstruktor wie folgt:

this.data = Collections.unmodifiableCollection(data);

In dem speziellen Fall, in dem T implementiert Vergleichbar, ich will nicht verlangen, dass ein comparator übergeben werden, da kann ich einfach die Natürliche bestellen. Also dachte ich, ich sollte in der Lage sein verwenden Sie diesen Konstruktor:

public <T extends Comparable<T>> MyClass(Collection<T> data)

Aber es ist anscheinend ein " type mismatch: cannot convert from Collection<T> to Collection<? extends T> in der abtretungserklärung über. Ich habe alle möglichen Dinge versucht: das hinzufügen von weiteren generischen Parameter, und so weiter, aber keine funktioniert. Ich scheine nicht in der Lage, um anzugeben, ein gebunden, das sagt: wenn Sie einen Typ T, die Vergleichbar sind, machen die einfache Sache.

Irgendwelche Ideen?

Dank.

  • Ich nehme an, dass Sie wollen, deklarieren Sie Sie als eine zweite Konstruktor, richtig? So ändern MyClass<T> zu MyClass<T extends Comparable<T>> ist nicht eine option?
  • das ist richtig.
  • Ich finde, dass ich tun kann dieser über eine statische factory-Methode: statische <V erweitert Vergleichbar<V>> MyClass<V> getInstance(Sammlung<? erstreckt sich V> data), dies ist aber etwas unbefriedigend.
  • (Hinweis: der Letzte code-Beispiel werden zwei generische Parameter aufgerufen T - auf die Klasse und auf der Konstruktor (wie auf einer Methode, die nur sehr selten nützlich).
InformationsquelleAutor dgorur | 2011-10-25
Schreibe einen Kommentar