2010-04-15 3 views
7

J'utilise JSON.simple pour générer une sortie JSON à partir de Java. Mais chaque fois que j'appelle jsonobj.put ("ceci", "que"), je vois un avertissement dans Eclipse:Comment éviter les avertissements Eclipse lors de l'utilisation de code hérité sans générique?

sécurité Type: La vente de la méthode (Object, Object) appartient à la HashMap de type brut. Les références à HashMap de type générique devrait être paramétrés

La solution propre serait si JSONObject était genericized, mais étant donné que ce n'est pas, je ne peux pas ajouter des paramètres de type générique pour résoudre ce problème. Je voudrais désactiver le moins d'avertissements possible, donc ajouter "@SuppressWarnings" ("non coché") "à beaucoup de méthodes n'est pas attrayant, mais ai-je d'autres options en plus de supporter les avertissements?

Répondre

7

Voici une option. C'est un peu moche, mais vous permet de limiter l'avertissement supprimé à cette seule opération.

Ajouter une fonction qui fait la distribution non contrôlée, et supprimer les avertissements à ce sujet:

@SuppressWarnings("unchecked") 
private final static Map<Object,Object> asMap(JSONObject j) 
{ 
    return j; 
} 

Ensuite, vous pouvez l'appeler sans avertissement du compilateur:

asMap(jsonobj).put("this", "that"); 

De cette façon, vous pouvez être sûr que vous ne supprimez aucun avertissement que vous voulez réellement voir.

+0

Dans NetBeans, cela retourne UN AUTRE ensemble d'avertissements pour moi: > La méthode privée aMap est déclarée finale > La méthode privée aMap est déclarée statique – user919860

4

vous pouvez avoir un paramètres de compilateur par projet et vous pouvez modifier ces avertissements à ignorer.

+3

C'est encore plus extrême que d'ajouter @SuppressWarnings ("non cochée") aux méthodes pertinentes; mon problème est que j'aimerais voir autant d'avertissements que possible tout en supprimant celui-ci. –

+0

vous pouvez supprimer cet avertissement spécifique dans votre configuration de projet héritée. rien d'extrême à ce sujet. –

+0

c'est extrême parce que * son * projet n'est pas un héritage, juste la bibliothèque qu'il référence. Votre suggestion est pour l'ensemble de son projet de supprimer les avertissements. – Kip

4

Ecrivez des méthodes d'assistance ou des classes wrapper pour la bibliothèque. Ajouter le @SuppressWarnings("unchecked") seulement à ces aides. Ensuite, utilisez les aides pour effectuer l'interaction avec la bibliothèque.

+0

Cela semble être la meilleure solution jusqu'à présent, merci. Eclipse a juste tort de m'avertir à ce sujet, n'est-ce pas? Ces erreurs doivent être dans le code JSONObject, pas mon code. –

+0

@Paul: Eclipse a raison, car c'est ainsi que cela est spécifié pour Java. Vous obtenez l'avertissement, car vous utilisez une méthode brute de HashMap (vous êtes obligé de le faire, car JSONObject étend HashMap). –

Questions connexes