2009-06-15 10 views
7

En ocasiones, las estructuras de datos deben tener ciertas relaciones que no se pueden describir directamente en Java, pero que es bueno verificar tan pronto como sea posible cuando se edite el código. Los ejemplos clásicos son que una matriz es lo suficientemente grande o que las enumeraciones en módulos diferentes tienen miembros correspondientes.¿Cómo afirmar algo en tiempo de compilación en Java?

BOOST proporciona una función de "afirmación estática" en C++ que incluso proporciona errores medio decentes cuando fallan las aserciones; ¿Alguien sabe cómo construir una instalación de aserciones en tiempo de compilación en Java?

Edición: Acabo de ver un ejemplo perfecto: this clase de Eclipse tiene dos matrices constantes que se supone que son de la misma longitud. Si ese fuera mi código, me gustaría que el compilador me diga si tienen longitudes diferentes.

+3

No sé si acepto que "las estructuras de datos deben tener ciertas relaciones que no se pueden describir directamente en Java". Sus ejemplos parecen inválidos. La relación del tamaño de una matriz con el resto del programa se puede expresar definiendo el tamaño de la matriz con una variable. Y si tiene un paquete Enum en un solo paquete, ¿por qué simplemente no lo haría referencia de otro? De hecho, no puedo pensar en ninguna razón para que múltiples Enums tengan los elementos correspondientes. Si se supone que Foo tiene los mismos elementos que Bar, ¿por qué no usar Foo en todos lados? ¿No es ese el objetivo de un Enum? –

+0

¿Puede proporcionar un ejemplo más específico del tipo de cosa que le gustaría poder afirmar de esta manera? –

Respuesta

2

Los compiladores incrementales que vienen como parte de IDE como Eclipse se pueden configurar para emitir advertencias o errores al encontrar código que es legal java, pero pueden causar problemas en el tiempo de ejecución. Puede ajustar estas configuraciones tanto como quiera, aunque puede comenzar a ser invasivo y molesto.

7

Hay una serie de herramientas que puede utilizar

  • PMD
  • Checkstyle
  • FindBugs
  • validar métodos de Jakarta Commons-Lang (usamos esto en vez de afirmar y dejamos en)
  • Cobertura/EMMA (para cobertura de código).

Una combinación de estos y buenas pruebas unitarias se captura la fruta madura (y algunas de las cosas más arriba también)

+1

+1 para usar pruebas unitarias como esencialmente un paso que está más cerca del tiempo de compilación que el tiempo de ejecución. –

Cuestiones relacionadas