Java - Verwenden Sie den Klassenparameter im Methodenparameter

8

Ich habe folgende Klasse:

%Vor%

Wie kann ich überprüfen, ob der Klassenparameter mit der Implementierung übereinstimmt? Im obigen Beispiel kann ich den Klassenparameter T nicht als Parameter verwenden.

    
FazoM 19.10.2017, 12:15
quelle

3 Antworten

13

Warum das nicht funktioniert

Sie versuchen zur Laufzeit auf einen generischen Typ zuzugreifen, was in diesem Fall nicht funktioniert, da tippe löschen .

Wie behebe ich

?

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.

Beispielcode

%Vor%

Mögliche Probleme

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.

    
jrtapsell 19.10.2017, 12:25
quelle
6

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:

ändern %Vor%

was Ihren Zweck erreichen wird.

    
Nathan 19.10.2017 12:35
quelle
4

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.

    
Alexey Romanov 19.10.2017 12:25
quelle

Tags und Links