Comprobación de una moldeada sin comprobar en Java 5 o más reciente

Si Query.list () devuelve una lista sin tipo, entonces el siguiente código producirá una fea advertencia: «Cast Desactivada: ‘java.util.List’ a ‘java.util.List

  etiquetas lista  =  nula , 
tratar
{.. . etiquetas />
) Query.list ();.
...

Por desgracia, sólo se puede usar @ SuppressWarnings en una declaración no lo hago desea agregar esta anotación a mi declaración de método porque mi método no hace mucho más que este reparto y esto es una advertencia útil para detectar en el resto del método. Una solución es añadir una nueva variable para hacer una declaración para utilizar @ SuppressWarnings sobre: ​​

  etiquetas lista  =  nula ; /> 
intentan {
...
@ SuppressWarnings ("sin marcar")
Query.list Lista tempTags = (Lista ();
tags = tempTags;
...

Ahora se produce un aviso de inspección en IDEA 10.5, «tempTags variable local se redundante.» Probablemente debería ignorar esta advertencia o desactivarlo completo, pero yo no estaba muy a gusto con que, o bien En situaciones como éstas, que, naturalmente, dirijo a Joshua Bloch para la orientación y su artículo # 77 – Eliminar las advertencias no controlada tiene este consejo en negrita:.

Si no se puede eliminar una advertencia, y usted puede probar que el código que provocó la advertencia es typesafe, entonces (y sólo entonces) suprimir la advertencia con una @ SuppressWarnings («sin marcar») anotación.

probablemente podría probar que mi consulta es sólo va a volver Strings, pero se me ocurrió que hay una manera más general, para satisfacer todos los requisitos anteriores:

   @ SuppressWarnings ({"sin marcar"})  
privada Lista getListOfStringsFromList (list Listado) {
si ((lista! = nula ) && (list.size ()> 0)) {
para (tema objeto: la lista) {
si ((artículo! = nula ) &&! (punto instanceof String)) {
throw new ClassCastException ("Lista de contenido no-strings Elementos:". + item.getClass () getCanonicalName ());
}}

}
(Lista ) lista;
}

El método no hace más que hacer un molde typesafe en una lista, por lo que puedo @ SuppressWarnings sobre todo el asunto. Se lanza una ClassCastException de ejecución no declarado, pero sólo si la persona que llama tiene un error de programación y esta excepción serían botados de todas formas siempre que la lista llegó a ser utilizado si no me lanzo aquí En resumen, este método tiene un error de programación que no puede ser capturado por el compilador y hace la segunda mejor opción:. fail-fast, haciendo que el error fácil de encontrar usando las anteriores. solución esconde toda esa complejidad y preserva la intención de la línea original de código:

  etiquetas lista  =  nula , 
Try
{...
tags = getListOfStringsFromList (Query.list ());
...

Pensé que esto era lo suficientemente interesante como para publicar. Bueno, al menos lo suficientemente interesante para las personas que están considerando un logotipo tatuaje Java. Si te gusto este, es probable que desee echa un vistazo a la respuesta de John Yeary y mi versión actualizada Genérico (parte 2 de este post).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *