una sistema prestamos libros libreria fuente control codigo caracteristicas biblioteca java generics warnings

sistema - ¿Cómo evitar la advertencia de conversión sin marcar en Java, si utiliza bibliotecas heredadas?



sistema de control de prestamos de libros en java (7)

¿Cómo puedo evitar esta advertencia con el idioma, no simplemente suprimiendo la advertencia con la anotación SuppressWarnings?

La anotación es la forma de evitar la advertencia con el idioma. No hay otra manera.

Me gusta la característica de genéricos en java y la uso a menudo. Pero tengo un problema, si uso bibliotecas que aún no son conscientes de los genéricos. Un ejemplo son los servlets. Si usa ServletRequest.getParameterMap() el resultado será un mapa en bruto, pero solo incluye String as keys y String[] como valores. Así que quiero asignarlo a un Map<String, String[]> . Pero para esta tarea me sale una advertencia. ¿Cómo puedo evitar esta advertencia con el idioma, no simplemente suprimiendo la advertencia con la anotación @SuppressWarnings ?


Como han dicho otros, las advertencias no pueden evitarse excepto suprimiéndolas. El problema en mi humilde opinión es que, o bien tiene que ensuciar su código con anotaciones que se aplican a un alcance pequeño o ignorarlos globalmente y arriesgarse a cometer errores.

IIRC hay una propuesta para generar advertencias donde los tipos brutos se devuelven en lugar de en la llamada.

Mientras tanto, creo que el mejor enfoque es utilizar un método de envoltura para que las advertencias se limiten a un solo lugar, donde es seguro ignorarlas:

class NoWarn { public static Map<String, String[]> getParameterMap(ServletRequest r) { @SuppressWarnings("unchecked") Map<String, String[]> result = r.getParameterMap(); return result; } }

Nota Esta respuesta se editó con un comentario de que las anotaciones no pueden estar dentro de los cuerpos de los métodos. Eso es incorrecto, lo anterior es sintácticamente correcto. He revertido el cambio.


Lo más limpio que puede hacer es encapsular la conversión de código heredado a código genérico y suprimir la advertencia solo allí.

Por ejemplo, puedes poner una fachada genérica en tu biblioteca heredada, aunque esto no siempre valga la pena.


Me topé con esta pregunta ya que también estaba tratando de encontrar una manera de evitar el uso de la supresión de supresión en tales casos. Encontré otra alternativa que pensé que valía la pena mencionar:

Map<?, ?> map = servletRequest.getParameterMap(); String[] values = (String[]) map.get("key");

Básicamente estamos utilizando comodín ''?'' para indicar que el mapa puede tener cualquier tipo de clave y valor.

El posible inconveniente que veo aquí es que estamos realizando una conversión explícita mientras obtenemos valores, lo que creo que dará lugar a una leve sobrecarga de rendimiento durante el tiempo de ejecución.


No creo que puedas. La advertencia aparecerá a menos que la suprima o la filtre de la lista de advertencias de su IDE.


Tuve el mismo problema, acabo de desactivar todas las advertencias genéricas y estoy feliz :) También podría desactivar la advertencia serialVersionUID ya que muchas personas no usan serialVersionUID.

en Eclipse - Ventana / Perferencias / Java / Compilador / Errores / Advertencias y desactive todos los tipos genéricos.

PD: Muchas advertencias erróneas te hacen ignorar todas las advertencias y algunas pueden ser útiles.


como otros dijeron, la única manera de deshacerse de esta advertencia es suprimirla.

la mejor práctica es encapsular la advertencia utilizando métodos y clases.

pero con otras advertencias, siempre intente resolver el problema que las está generando, como eliminar las importaciones no utilizadas, etc ... hace que su aplicación sea más ágil y mejor.

codificación feliz