___ answer2989556 ___
Sicher könnte man das, und für die meisten Anwendungen würde es wahrscheinlich ausreichen.
Mit der ersten Methode erhalten Sie jedoch ein raffinierteres Objekt. Angenommen, Sie erstellen ein Objekt TypeToken
mit der ersten Methode und Type
mit der zweiten Methode. Dann würde List<String>
true zurückgeben (da die erste Methode ein Objekt zurückgibt, das die equals-Methode korrekt implementiert), aber Type
würde false zurückgeben (da in der zweiten Methode die equals-Methode nicht überschrieben wurde und verwendet wird die Implementierung von HashMap<String, String>
).
Dies gilt auch für andere (manchmal nützliche Methoden) wie Type
, .equals()
usw. Die zweite Methode bietet keine sinnvollen Implementierungen von diesen.
___ qstnhdr ___ Erstellen eines parametrisierten Objekttyps mit anonymer Klasse
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen.
___ qstntxt ___
Das ist vielleicht eine blöde Frage, aber ich habe gerade eine Frage gesehen, die fragt: wie man eine Type-Variable für einen generischen Typ erstellt . Der Konsens schien zu sein, dass Sie eine Dummy-Methode haben sollten, die diesen Typ zurückgibt, und dann Reflektion verwenden, um sie zu erhalten (in diesem Fall wollte er Type
). Etwas wie das:
%Vor%
Meine Frage ist, nicht so viel Reflexion benutzt zu haben, könntest du nicht einfach etwas tun wie:
%Vor%
Würde das funktionieren? Wenn nicht, warum nicht? Und was sind einige der Gefahren / Probleme, wenn sie es tun (abgesehen davon, dass sie einen Typ wie TypeToken
zurückgeben können, was offensichtlich nicht möglich ist.
___ answer2989646 ___
Ich glaube, der einfachste Weg (== Least Code) wäre eine Dummy-Schnittstelle, die den Typ erweitert, an dem Sie interessiert sind, und dann TypeToken
von seiner Klasse (verwenden Sie %code% wenn Sie an einer Klasse interessiert sind:
%Vor%
Es skaliert jedoch nicht gut, da Sie für jede %code% , die Sie darstellen möchten, eine neue Klasse erstellen müssen. Ich sehe nicht, warum Ihre Implementierung nicht funktionieren würde (es sei denn, es gibt irgendwo verengte Casts), und es hat den attraktiven Vorteil, dass Sie es wiederverwendbar machen können.
___ tag123generics ___ Generika sind eine Form von parametrischer Polymorphie, die in einer Reihe von Sprachen gefunden wird, einschließlich .NET-Sprachen, Java und Swift.
___ antwort13202444 ___
Wenn Sie die Guava -Bibliothek von Google in Ihr Projekt aufnehmen (sollten Sie; es ist großartig), verwenden Sie < a href="http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/reflect/TypeToken.html"> %code% , um einen Typ zu erhalten . Die Google Gson -Bibliothek (für die Interaktion mit JSON) hat eine ähnliche version . Beide werden wie folgt verwendet (um eine %code% für %code% :
zu erhalten)
%Vor%
Wenn Sie sich nicht auf Bibliotheken von Drittanbietern verlassen möchten, können Sie anonyme Typen verwenden, um einen generischen konkreten -Typ mit einer Codezeile zu erhalten (diese Technik funktioniert nicht mit Schnittstellen) und könnte mehr Probleme bereiten, als es für abstrakte Typen wert ist). Um eine %code% für %code% zu erhalten, tun Sie Folgendes:
%Vor%
Ich habe bestätigt, dass die von Gson erstellten %code% instance %code% und %code% Instanzen erstellt wurden 's %code% , obwohl sie für die Guava Version von %code% , auf die ich im Moment keinen Zugriff habe. (Guava ist eine allgemeinere Bibliothek, die für alle möglichen Dinge so praktisch ist, dass Sie sie wahrscheinlich sowieso benutzen sollten.)
___