Was ist der Vorteil eines generischen Konstruktors für eine nicht-generische Klasse? Java-Spezifikation erlaubt Folgendes:
%Vor%Kann man ein realistisches Beispiel dafür finden, wann es die Typsicherheit der Klasse erhöht? Wie wäre es besser als die Verwendung von Generic an erster Stelle.
Ich verstehe, dass Java-Entwickler die Konstruktoren mit Methoden konsistenter haben wollten. Angesichts dessen, dass Konstruktoren Nebenwirkungen haben können, können generische Konstruktoren Generics verwenden, um einige Parameter zu verändern, deren Referenzen nicht beibehalten werden, wie in
%Vor%Die einzige Verwendung, die ich mir vorstellen kann, wäre, wenn der Konstruktor während der Ausführung ein generisches Objekt verwenden müsste, aber das Objekt nicht speichern würde, sobald es fertig ist.
Zum Beispiel:
%Vor%Es ist wahrscheinlich nur etwas, was die Sprachgestalter beschlossen haben, nur für den Fall, dass jemand es wollte, da es keinen Grund gab, die Leute daran zu hindern, es zu tun.
Ja, ich habe ein paar Mal darüber nachgedacht.
Hypothetisch (es gibt xx Gründe, warum es nicht so ist) wäre es schön, wenn generische Konstruktoren einen formalen generischen Typ für die ganze Klasse definieren könnten (wie es die generische Klassendeklaration tut) ... Das heißt, wenn generic definiert wird Konstruktor würde Sie generische Felder in dieser Klasse haben lassen ...
Zum Beispiel, wenn Sie eine Verallgemeinerung vermeiden wollten:
%Vor% Sie wollten aber, dass RequestCallback generisch ist RequestCallback<E extends Entity>
, das konnten Sie nicht tun, weil nur zwei Arten von Requests PUT / POST Entity verwenden. Nur Konstruktoren für PUT / POST-Anfragen enthalten Entity-Parameter.
Aber die Klasse kann nicht generisch sein, weil Sie RequestCallback für eine Anfrage erstellen würden, die keine Entität hat, was bedeutet, dass Sie
instanziieren würden %Vor%Damit ist der einzige mögliche Weg hier die Verallgemeinerung:
%Vor%Damit Sie generische Felder haben können:
%Vor%In diesem speziellen Beispiel ist die Verallgemeinerung die richtige Wahl, aber es gibt Fälle, in denen eine Verallgemeinerung nicht möglich wäre.
Tags und Links java generics polymorphism