2010-04-15 20 views
7

Estoy usando JSON.simple para generar salida JSON desde Java. Pero cada vez que llamo jsonobj.put ("este", "que"), veo una advertencia en Eclipse:¿Cómo evitar las advertencias de Eclipse cuando se usa código heredado sin genéricos?

de seguridad Tipo: El método put (Object, Object) pertenece a la HashMap tipo de prima. Las referencias a HashMap tipo genérico se deben parametrizar

La solución limpia sería si fuera JSONObject genericized, pero ya que no es, no puede añadir ningún parámetro de tipo genérico para solucionar este problema. Me gustaría desactivar el menor número posible de advertencias, por lo que agregar "@SuppressWarnings (" unchecked ") a muchos métodos no es atractivo, pero ¿tengo otra opción además de soportar las advertencias?

Respuesta

7

Aquí hay una opción. Es un poco feo, pero le permite delimitar la advertencia suprimida solo a esa operación individual.

Añadir una función que hace el reparto no se controla, y suprimir las advertencias sobre el mismo:

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

Entonces se le puede llamar sin advertencias del compilador:

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

De esta manera, usted puede estar seguro de que no estás suprimiendo ninguna advertencia que realmente quieras ver.

+0

En Netbeans, devuelve OTRO conjunto de advertencias para mí: > Método privado aMap se declara final > Método privado aMap se declara estático – user919860

4

puede tener una configuración de compilador por proyecto y puede cambiar esas advertencias a ignorar.

+3

Eso es incluso más extremo que agregar @SuppressWarnings ("desmarcado") a los métodos relevantes; mi problema es que me gustaría ver tantas advertencias como sea posible mientras suprimo esta. –

+0

puede suprimir esta advertencia específica en la configuración de su proyecto heredado. nada extremo al respecto. –

+0

es extremo porque * su * proyecto no es heredado, solo la biblioteca a la que hace referencia. Su sugerencia es que su proyecto completo suprima las advertencias. – Kip

4

Escriba algunos métodos auxiliares o clases contenedoras para la biblioteca. Agregue el @SuppressWarnings("unchecked") solo a esos ayudantes. Luego use los ayudantes para realizar la interacción con la biblioteca.

+0

Esta parece ser la mejor solución hasta ahora, gracias. Eclipse está equivocado al advertirme sobre esto, ¿no? Estos errores deberían estar en el código JSONObject, no en mi código. –

+0

@Paul: Eclipse tiene razón, porque así es como se especifica para Java. Recibirá la advertencia, porque está utilizando un método sin procesar de HashMap (está obligado a hacerlo, porque JSONObject amplía HashMap). –

Cuestiones relacionadas