2010-02-23 17 views

Respuesta

5

IntelliJ IDEA le ofrece una herramienta especial para generar colecciones heredadas.

+0

Sí, gracias. Supongo que sería lo más cercano a lo que estaba buscando. –

6

una herramienta automatizada para introducir genéricos y enumeraciones al código siempre que sea posible

Este tipo de herramienta se conoce como un "programador". Cuando esté disponible en forma totalmente automática, se quedará sin trabajo (y probablemente pasará sus días como una distracción divertida para sus nuevos señores robóticos).

En serio, así es, manera más allá de lo que se puede hacer automáticamente, especialmente la introducción de enumeraciones. El parámetro de tipo genérico para colecciones puede quizás derivarse del contexto, pero solo para casos simples.

+0

Desearía poder votar dos veces. El código generado automáticamente en estos casos es AWFUL. –

+0

Es difícil no estar de acuerdo con las enumeraciones. Pero parte de los genéricos y comentar sobre el código generado automáticamente me hace pensar que ustedes solo usan Eclipse. – Roman

+1

Uso Eclipse, pero también utilicé IntelliJ y, francamente, este tipo de migración no debe hacerse automáticamente. Es una buena ocasión para refactorizar y rediseñar una aplicación, esas no son solo características de idiomas, sino también cambios de paradigma. –

1

Michael tiene razón en que esto no se puede hacer automáticamente. Teniendo esto en cuenta, podría considerar un enfoque por fases mediante el cual empiece por generar sus API/interfaces (por ejemplo, entre subsistemas) mediante la conversión de colecciones en este punto al tipo correcto. También puede agregar aserciones para verificar que estos lanzamientos sean válidos, lo que luego podría eliminar después de la prueba.

Obviamente, el casting no es ideal, pero significa que puede actualizar la API desde el principio (suponiendo que se trata de un sistema basado en API) y luego "corregir" las partes internas más adelante.

1

No estoy convencido de que es necesariamente una buena idea "generifying" un antiguo código base:

  • no va a mejorar el rendimiento, ya que la misma clase arroja suceda (detrás de las escenas) cuando usa genéricos como cuando usas tipos crudos con moldes explícitos de tipo.

  • Es poco probable que corrija errores. Es probable que ya se hayan encontrado y arreglado errores importantes causados ​​por la conversión al tipo incorrecto.

Así que lo único que haría es hacer que el código sea un poco más legible. Y a la baja tiene el esfuerzo de realizar los cambios y las pruebas, y el riesgo de que pueda introducir nuevos errores.

Cuestiones relacionadas