Java Generics, Erstellen einer Instanz von ClassT

7

Ich versuche eine generische Methode zum Deserialisieren von JSON in mein Modell zu schreiben. Mein Problem ist, dass ich nicht weiß, wie man Klasse vom allgemeinen Typ T erhält. Mein Code sieht ungefähr so ​​aus (und kompiliert nicht auf diese Weise)

%Vor%

Ich habe versucht, etwas anderes, um den Typ zu bekommen, aber es wirft einen Fehler Ich hatte die Klasse als JsonHelper<T> und dann versuchte dies

%Vor%

Die Methodensignatur sieht so aus

%Vor%

Also, wie kann ich entlang T übersetzen, so dass, wenn ich JsonHelper.Deserialize<MyObject>(json); rufe, ich eine Instanz des korrekten Objekts bekomme?

    
Josh 18.02.2011, 19:46
quelle

2 Antworten

13

Sie müssen eine Class Instanz von irgendwo bekommen. Das heißt, Ihre Methode Deserialize() muss einen Class<T> als Parameter verwenden, genau wie die zugrunde liegende Methode fromJson() .

Ihre Methodensignatur sollte wie Gson aussehen:

%Vor%

Ihre Anrufe werden wie folgt aussehen:

%Vor%

Übrigens ist die Konvention, Methodennamen mit einem Kleinbuchstaben zu beginnen, in Java gut etabliert.

    
erickson 18.02.2011, 19:50
quelle
6

Unglücklicherweise, so wie Java mit Generika umgeht, können Sie die Klasse nicht so bekommen, wie Sie es wünschen. Aus diesem Grund fragt Google nach der Klasse als Argument. Sie müssen Ihre Methodensignatur ändern, um das Gleiche zu tun.

    
StriplingWarrior 18.02.2011 19:49
quelle

Tags und Links