2012-09-25 85 views
5

Me gustaría que las aserciones menos intensivas en cómputo permanezcan encendidas en todo momento y deshabilite las aserciones de mayor uso de cómputo. Un caso de uso práctico podría ser cuando movemos el código a producción (según el programador pragmático, esta es la forma sugerida para manejar las afirmaciones).Controlando las Afirmaciones de Java - Mejores Prácticas

¿Cuál es la mejor manera de controlar las afirmaciones? (Tenga en cuenta que ya he habilitado las aserciones en las variables de máquina virtual utilizando "-ea").

Un ejemplo sencillo:

/** 
* 
* @precondition sizeOfList >= 2 
*/ 
private ArrayList<Integer> createSortedList(int sizeOfList){ 
    ArrayList<Integer> results = new ArrayList<Integer>(); 

    for(int i = 0; i<sizeOfList; i++){ 

     <algorithm to add sorted numbers to array> 

    } 

    if(<some_flag>) 
     assert results.get(0) < results.get(1) : "Results are not sorted."; 

    assert results.size() == sizeOfList : "Results-list size does not equal requested size."; 

    return results; 
} 

Es lo mejor es utilizar las propiedades del sistema para controlar la variable? Si ese es el caso, ¿se pueden establecer las Propiedades del sistema para un proyecto completo y no solo para una clase particular (en Eclipse)?

¿Es una mejor idea usar una variable constante definida en una clase "Constantes"?

¿Hay otras formas en las que no estoy pensando?

Gracias de antemano.

+1

¿Puede profundizar en la diferencia entre las "aserciones de menor intensidad computacional" y "las que requieren un mayor uso de cómputo"? Tal vez dar un ejemplo o dos? – allingeek

+0

Un ejemplo de una compilación menos intensiva sería comparar con una variable, por ejemplo: 'assert i <7:" i no es menos de 7 ";' Un compilador más alto-intensivo sería algo que requiere más procesamiento, como comprobar el promedio de cada valor en una lista: 'assert avg (listOfIntesgers) <7:" Average is not less than 7. ";' Lo ideal sería que desactives el high-comp -afirmaciones intensivas y deja en los más pequeños en producción. – mtical

Respuesta

2

La característica definitoria de la declaración de afirmación es que se puede desactivar, por lo que solo la usaría para las afirmaciones que no siempre se deberían ejecutar. Para las afirmaciones de que siempre se ejecutan, lo haría algo como:

if (results.size() != sizeOfList) 
    throw new AssertionError("Results-list size does not equal requested size."); 

A continuación, puede activar/desactivar las afirmaciones caros a través de la opción -ea JVM.