"Olá, amigo!"

"Olá, Rishi."

"Hoje darei uma introdução mais profunda às anotações."

"Como você provavelmente já sabe, anotações são palavras especiais que podem ser colocadas ao lado de classes, campos, métodos e variáveis."

"Sim. Eu os encontro com muita frequência."

"Às vezes, eles também são chamados de metadados . Seu objetivo principal é armazenar informações adicionais específicas sobre métodos, campos e classes."

"Para quem eles guardam?"

"Essa é uma pergunta muito boa."

"As pessoas escrevem anotações, o que significa que alguém deve precisar delas."

"As anotações permitem que você armazene informações adicionais sobre o código e os elementos do programa, mas, formalmente, não fazem parte do código."

"As anotações podem ser usadas para gerar XML, determinar se um método está obsoleto, rastrear bugs, etc."

"Aqui está um exemplo de anotações no código:"

Exemplo
@CatInfo(manager=Catmanager.class, unique=true)
class Cat
{
 @Name("Missy")
 private String name;

 @SuppressWarnings(value = "unchecked")
 void getUniqueCatName()
 {

 }
}

"Como você pode ver, os dados podem ser armazenados em anotações."

"Se uma anotação tiver apenas um campo chamado value , o nome do campo poderá ser omitido:"

Exemplo
@SuppressWarnings("unchecked")
void getUniqueCatName()
{

}

"Se não houver parâmetros dentro dos parênteses, eles também podem ser omitidos:"

Exemplo
@Override
void getUniqueCatName()
{

}

"É super fácil criar sua própria anotação. Declarar uma anotação é quase idêntico a declarar uma interface."

Exemplo
@interface CatManager
{
 Class manager();
 boolean unique();
 String name() default "Unknown Cat";
}

"Existem apenas algumas diferenças."

"Primeiro, você coloca um sinal «@» antes da palavra interface ."

"Em segundo lugar, uma anotação pode ter valores padrão. Você usa a palavra padrão para definir valores padrão . Veja o exemplo acima. Esses parâmetros são opcionais e podem ser omitidos ao adicionar anotações."

"Ah. É tudo mais fácil do que eu pensava. E tenho evitado eles como o Robo-Diabo evita água benta. Não é muito agradável quando o código tem um monte de coisas que você não entende totalmente."

"Ah, que bom que você me lembrou - quero falar mais sobre as anotações usadas pelo compilador."

"Existem apenas 3 dessas anotações. Bem, três até agora."

@Descontinuada.

"Você pode anotar uma classe ou um método com @Deprecated. Isso fará com que o compilador emita um aviso (um aviso não é um erro) e o IntelliJ IDEA exibirá esse método como texto tachado. Algo assim  :

Exemplo
Date date = new Date();
int year = date.getYear();

@Sobrepor.

"É considerada uma prática recomendada adicionar a anotação @Override aos métodos que você substitui."

"Para que serve isso? O IDEA já não mostra se um método foi substituído ou não?"

"Primeiro, existe o IDEA e depois a sintaxe Java."

"E segundo, hipoteticamente, você poderia ter uma situação em que o método de uma classe base é renomeado sem uma alteração correspondente no nome do método na subclasse. O programa não funcionará como esperado, mas ninguém notará. Essa anotação foi inventada para evitar que essas situações aconteçam:"

Exemplo
@Override
void getUniqueCatName()
{

}

@Suprimir avisos.

"Às vezes, o compilador exibe muitos avisos. E às vezes sabemos sobre os «problemas» e escolhemos deliberadamente usar o código correspondente que os cria. Você pode usar essa anotação para ocultar alguns desses avisos."

"Um programador pode usar a anotação @SuppressWarnings para dizer ao compilador: «Não mostre um aviso para este erro - é intencional.» Por exemplo:"

Exemplo
@SuppressWarnings("unchecked")
void getUniqueCatName()
{

}

"Entendi."

"Estou ficando um pouco cansado. Vou molhar minha garganta seca. Vamos continuar depois de um intervalo, ok?"

"Claro."