O que faz a palavra-chave Java assert, e quando deve ser usada?

Quais são alguns ** exemplos reais de vida*** para entender o papel-chave das afirmações?

Solução

Assertions (por meio da palavra-chave **assert***) foram adicionados em Java 1.4. Eles são usados para verificar a correção de um invariante no código. Eles nunca devem ser acionados em código de produção, e são indicativos de um bug ou mau uso de um caminho de código. Eles podem ser ativados em tempo de execução por meio da opção ea' no comandojava', mas não são ativados por padrão.

Um exemplo:

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;
}
Comentários (6)

As asserções são usadas para verificar as pós-condições e "nunca devem falhar" pré-condições. O código correto nunca deve falhar uma asserção; quando disparam, devem indicar um bug (esperançosamente em um lugar que esteja próximo de onde o verdadeiro locus do problema está).

Um exemplo de uma afirmação pode ser verificar se um determinado grupo de métodos é chamado na ordem certa (por exemplo, que hasNext() é chamado antes de next() em um Iterator).

Comentários (2)

Um exemplo do mundo real, de uma classe Stack (de Assertion in Java Articles)

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