Charger un Objet à l'aide de Gson

Pardonnez-moi si c'est insignifiant ou pas possible, mais je vais avoir un lundi matin, moment ici.

J'aimerais créer une méthode qui met en œuvre certaines méthodes de la Gson bibliothèque de chargé de certains paramètres des Objets. En gros, j'ai un tas de paramètres différents objets, mais je ne veux pas habe pour remplacer la méthode de chargement pour chaque classe j'aimerais avoir quelque chose comme:

public class ConfigLoader {
    public static void main(final String[] args) {   
        final ConfigurationSettings loadedConfigSettigs =
            load("testSettings.json", ConfigurationSettings.class);

        final AlternativeConfigurationSettings alternativeConfigSettigs =
            load("testSettings2.json", AlternativeConfigurationSettings .class);
    }

    public T load(final InputStream inputStream, final Class<T> clazz) {
        try {
            if (inputStream != null) {
                final Gson gson = new Gson();
                final BufferedReader reader =
                    new BufferedReader(new InputStreamReader(inputStream));
                return gson.fromJson(reader, clazz);
            }
        } catch (final Exception e) {
        }
        return null;
    }
}

où je peux passer dans la InputStream et la classe de l'objet que je veux renvoyer. Est-il une façon simple de le faire (je ne veux pas avoir à créer une méthode pour chaque Classe, je veux être en mesure de charger, je ne veux pas avoir à créer un chargeur spécifique pour chaque classe)?

  • Quel est le problème? La seule chose qui n'est pas correct dans votre code est la saisie de l'Objet, car il n'est pas "typables". Vous devez retourner directement T à la place.
  • Merci de remarquer que la surveillance. J'ai modifié le code et donné un peu plus de contexte pour montrer comment je voudrais l'utiliser. Je serait un peu comme d'avoir un chargeur qui charge un objet donné, la classe a réussi, sans avoir à créer un chargeur pour chaque classe (comme je l'aurais à l'aide de la Class<T> méthode)?
  • OK, mais cela fonctionne, droit (outre le fait que vous passez une Chaîne au lieu d'un InputStream, mais nous sommes votre point de vue)? (ou alors dites-nous quel est le problème que vous rencontrez). Je ne vois pas de problèmes à ce que vous êtes en train de faire et la façon dont vous semblez le faire. Alors, qu'est-ce que le blocage de vous?
  • La seule chose que je voulais faire un tour était que d'avoir à jeter chaque Objet que je reviens de la load méthode (par exemple, public class ConfigLoader<T> ...... final ConfigurationSettings loadedConfigSettigs = (ConfigurationSettings)load("testSettings.json", ConfigurationSettings.class); je me demandais juste si il y avait un plus beau/plus concis sans casting compte tenu du fait que je sais à quel type d'objet que j'attends quand je l'appelle la load méthode.
  • Eh bien la façon dont c'est écrit, vous n'aurez pas à jeter. Vous passez le Class<T> paramètre et en retour, vous recevrez un objet de type T, qui est le point de l'ensemble de la saisie. Donc, oui, il fonctionnera de la façon dont vous l'avez écrit.
  • J'obtiens une erreur dans eclipse lorsque je le fais sans le casting bien... Type mismatch: cannot convert from Object to ConfigurationSettings
  • Assurez-vous que votre Compilateur niveau de conformité est de 1,5 ou au-dessus et aussi ne pas oublier de mettre la static <T> avant votre type de retour