In einer Klasse ohne generische Typen möchte ich ein ziemlich komplexes generisches Feld ähnlich dem folgenden deklarieren:
%Vor%Problem ist der Java-Compiler wird mich nicht lassen:)
Also meine Frage ist, wie führe ich T und S richtig ein, ohne Typen zu meiner Klasse Client hinzuzufügen.
Mein Ziel ist es, das Class
zu einem Untertyp von Serializable
zu machen und das Consumer
ist ein Subtyp der Klasse, die Sie für Class
ausgewählt haben.
Sie können nicht. Ihre einzige Option besteht darin, die generischen Typparameter in Ihrer Client
-Klassendeklaration zu deklarieren. Wenn Ihre Client
-Klasse keine generischen Typparameter hat, können ihre Member nicht generisch sein. Sie müssen tatsächliche Typen in der Deklaration Ihrer Klassenmitglieder verwenden.
Sie müssen irgendwo den Typ-Parameter einführen, damit Sie sie in der Definition für Ihre Klassenmitglieder verwenden können.
Die Einführung eines Typparameters kann nur auf Klassenebene oder auf Methodenebene erfolgen. In Ihrem Fall sollte es auf Klassenebene sein:
%Vor% Dies bedeutet jedoch, dass für beide Mitglieder ( classToConsumerTry1
und classToConsumerTry2
), T
und S
gleich sind. Wenn Sie möchten, dass sie anders sind, müssen Sie diese zwei Werte aus zwei verschiedenen Klassen erhalten, die beide mit separaten Typparametern parametrisiert sind.
Sie können dies nicht direkt auf dem Feld tun, aber Sie können Ihre Typenrichtlinie durch generische Methoden pflegen (sie können sogar in nicht-generischen Klassen existieren):
%Vor%