style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

SuppressWarnings - Duda

Muy buenos días a todos, mi objetivo con este tema es aclarar una duda que tengo sobre el pequeño trozo de código

@SuppressWarnings()

Lo que me gustaría saber es que tan buena practica o que tan recomendable es utilizar esto en nuestro desarrollo, y si no es mejor tratar de evitar la advertencia en vez de suprimirla.

De antemano muchas gracias por sus respuestas.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Depende del caso específico.

Depende del caso específico.

Definitivamente es mejor tratar de evitar la advertencia, pero si resolver el problema complica mas el código es mejor simplemente usarla.

Ejemplo, si hay una advertencia por no usar generics y se puede arreglar especificando la clase hay que hacerlo en vez de poner la anotación.

Lo que no se debe de hacer es establecer una regla totalitaria: "Simpre usar @SuppressWarnings " o "Nunca usar @SupressWarnings". En el code review se puede discutir de cada caso especifico y decidir.

Imagen de ezamudio

depende

Yo la uso con el código autogenerado por Axis2 para mis clientes de web services. Y también la he usado con mi propio código, pero sólo cuando no hay otra opción. Lo importante es saber cuándo y dónde usarlo, y sobre todo qué advertencias son las que estás suprimiendo.

Si vas a usar esta anotación, lo más recomendable es que el alcance sea lo más específico posible. Por ejemplo si en un método de 20 líneas de código hay una declaración que arroja advertencia relacionada con generics, es mejor anotar la declaración y no todo el método.

Ejemplo: suponte que tienes un mapa cuya estructura conoces. Viene una llamada a un web service que te devuelve un objeto JSON, pero sabes que la estructura es que tiene dos llaves, k1 y k2, y que k1 trae una lista de strings mientras que k2 trae un mapa de enteros. Vas a tener que estar haciendo varios casts en distintos lugares, así que sería tentador anotar toda tu clase, pero es mejor si solamente anotas las declaraciones, o los métodos donde hagas muchos de estos casts...

Map<String,Object> json;//el valor puede ser una lista o un mapa...

@SuppressWarnings("unchecked")
public void mal() {
  List<String> v1=(List<String>)json.get("k1");
  List<String> v2=(Map<String,Integer>)json.get("k2");
  //usar v1 y v2
}

public void bien() {
  @SuppressWarnings("unchecked")
  List<String> v1=(List<String>)json.get("k1");
  @SuppressWarnings("unchecked")
  List<String> v2=(Map<String,Integer>)json.get("k2");
  //usar v1 y v2
}

Recuerda que de entrada, cuando haces un cast le estás diciendo al compilador "yo sé lo que hago". Y el compilador en vez de error entonces te da una advertencia, como diciendo "seguro seguro segurísimo que sabes lo que haces?" y al usar esta anotación para suprimir esa advertencia, ya es de plano decirle "sí, cállate y haz lo que te digo". Pero una cosa es realmente saber lo que haces y otra muy distinta (y más común) es creer que sabes lo que haces. Por eso hay que tener cuidado con estas anotaciones...

Imagen de juan_dllo

Lo tendré en cuenta

Muchas gracias por las aclaraciones, me queda todo muy claro con respecto a esta anotación, paso siguiente poner en practica estas recomendaciones que me vienen de maravilla.

Saludos,

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">