Sie versuchen zur Laufzeit auf einen generischen Typ zuzugreifen, was in diesem Fall nicht funktioniert, da tippe löschen .
Der einfachste Weg, dies zu beheben, ist die Verwendung von Class<T>
im Konstruktor. Dadurch erhalten Sie den Typ zur Laufzeit. Sie können dann überprüfen, ob die Liste den Wert enthält, den Sie erhalten haben.
Ihr Code unterstützt zur Zeit keine Subtypen, was zu Problemen führen kann, wenn Sie damit nicht einverstanden sind (Sie können an Listen arbeiten, aber nicht unbedingt an ArrayLists), dies macht den LSP obwohl.
Obwohl einige andere Antworten ziemlich gut sind, möchte ich eine andere Problemumgehung vorschlagen:
Sie könnten eine leere Schnittstelle MyInterface
erstellen und alle Klassen in Ihrer Liste diese Schnittstelle implementieren. Dann können Sie Ihre Klassendeklaration zu:
was Ihren Zweck erreichen wird.
Sie müssen die Klasse in den Konstruktor übergeben:
%Vor% weil T
zur Laufzeit nicht verfügbar ist: für new Publisher<T1>()
und new Publisher<T3>()
wird genau der gleiche Code ausgeführt.