¿Qué hace la palabra clave assert de Java y cuándo debe utilizarse?

¿Cuáles son algunos ejemplos de la vida real para entender el papel clave de las aserciones?

Solución

Las aserciones (mediante la palabra clave assert) se añadieron en Java 1.4. Se utilizan para verificar la corrección de una invariante en el código. Nunca deben activarse en el código de producción, y son indicativos de un error o de un mal uso de una ruta de código. Pueden activarse en tiempo de ejecución mediante la opción -ea del comando java, pero no se activan por defecto.

Un ejemplo:

public Foo acquireFoo(int id) {
  Foo result = null;
  if (id > 50) {
    result = fooService.read(id);
  } else {
    result = new Foo(id);
  }
  assert result != null;

  return result;
}
Comentarios (6)

Las aserciones se utilizan para comprobar las post-condiciones y "nunca deberían fallar" las pre-condiciones. El código correcto nunca debería fallar una aserción; cuando se activan, deberían indicar un error (con suerte, en un lugar cercano al lugar real del problema).

Un ejemplo de aserción podría ser comprobar que un grupo particular de métodos es llamado en el orden correcto (por ejemplo, que hasNext() es llamado antes de next() en un Iterator).

Comentarios (2)

Un ejemplo del mundo real, de una clase Stack (de Assertion in Java Articles)

public int pop() {
   // precondition
   assert !isEmpty() : "Stack is empty";
   return stack[--num];
}
Comentarios (7)