0Pricing
Java Academy · Aula

Definição de Anotações: Elementos e Valores Padrão

Crie anotações personalizadas com @interface, defina elementos com valores padrão e aplique meta-anotações.

Definição de Anotações: Elementos e Valores Padrão é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

O que são anotações?

Anotações são metadados aplicados a classes, métodos, campos ou parâmetros. Elas não alteram diretamente o comportamento — fornecem informações para compiladores, estruturas ou processadores em tempo de execução.

Declarando uma anotação com @interface

Use @interface para declarar uma anotação personalizada. Os elementos se parecem com métodos. O valor padrão é especificado com default.

@interface Retry {
    int times()      default 3;
    long delayMs()   default 1000L;
    Class<? extends Throwable>[] on() default {Exception.class};
}

Aplicando a anotação

Aplique a anotação ao alvo. Omita os elementos que têm valores padrão. Quando apenas um elemento se chama value, ele pode ser definido sem a chave.

@Retry(times = 5, delayMs = 500)
public void callExternalService() { ... }

// Single-element shorthand:
@interface Label { String value(); }
@Label("production")
public class App {}

Tipos de elementos de anotação

Os elementos só podem ser: tipos primitivos (int, long, etc.), String, Class, uma enumeração, outro tipo de anotação ou um vetor unidimensional de qualquer um dos tipos anteriores.

@interface Config {
    String   host();
    int      port()      default 8080;
    LogLevel level()     default LogLevel.INFO;  // enum
    Class<?> handler()   default DefaultHandler.class;
    String[] tags()      default {};
}

Meta-anotações: @Retention

@Retention controla por quanto tempo a anotação é mantida: SOURCE (descartada pelo compilador), CLASS (em .class, não disponível em tempo de execução), RUNTIME (legível por reflexão).

@Retention(RetentionPolicy.RUNTIME)
@interface Retry {
    int times() default 3;
}

Meta-anotações: @Target

@Target restringe onde a anotação pode ser aplicada. É possível listar vários alvos.

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Audited {
    String description() default "";
}

@Documented e @Inherited

@Documented inclui a anotação no Javadoc. @Inherited permite que as subclasses herdem a anotação da superclasse (somente para anotações no nível da classe).

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Category {
    String value();
}

Anotações @Repeatable

Marque uma anotação com @Repeatable para permitir que ela apareça várias vezes no mesmo elemento. Forneça uma anotação contêiner que armazene um vetor.

@Repeatable(Tags.class)
@interface Tag { String value(); }
@interface Tags { Tag[] value(); }

@Tag("fast")
@Tag("stable")
public class Service {}

Valores padrão e omissão de elementos

Os elementos com valores default não precisam ser especificados no local da chamada. Os elementos sem valores padrão são obrigatórios.

@Retry                  // uses defaults: times=3, delayMs=1000
public void action1() {}
@Retry(times=1)         // overrides only times; delayMs stays 1000
public void action2() {}

Anotação vs interface marcadora

Interfaces marcadoras (como Serializable) são verificadas com instanceof e transmitem informações de tipo. As anotações são mais flexíveis — carregam metadados e podem ter elementos.

Anotações integradas comuns

Conheça as anotações do JDK: @Override, @Deprecated, @FunctionalInterface, @SuppressWarnings e @SafeVarargs.

@Override
public String toString() { return "User{" + name + "}"; }
@Deprecated(since = "2.0", forRemoval = true)
public void oldMethod() {}

Verificação rápida

Qual é a única política de retenção que torna uma anotação legível em tempo de execução?

Recapitulação

Declare anotações com @interface. Use @Retention(RUNTIME) para processamento por reflexão, @Target para restringir o uso e default para elementos opcionais. @Repeatable permite empilhar anotações.

Perguntas Frequentes

A aula “Definição de Anotações: Elementos e Valores Padrão” é grátis?

Sim — o texto completo de “Definição de Anotações: Elementos e Valores Padrão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Definição de Anotações: Elementos e Valores Padrão”?

Crie anotações personalizadas com @interface, defina elementos com valores padrão e aplique meta-anotações. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Definição de Anotações: Elementos e Valores Padrão”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Definição de Anotações: Elementos e Valores Padrão
  2. Políticas de Retenção e Tipos de Destino
  3. Processamento de Anotações em Tempo de Execução
  4. Processadores de Anotações em Tempo de Compilação
← Voltar para Java Academy