Boa tarde, Carlos! Como vai?
Na realidade, o String value()
não é chamado de método e sim de elemento da anotação, como pode ser visto nessa página da documentação da Oracle.
The annotation can include elements, which can be
named or unnamed, and there are values for those
elements:
@Author(
name = "Benjamin Franklin",
date = "3/27/2003"
)
class MyClass() { ... }
or
@SuppressWarnings(value = "unchecked")
void myMethod() { ... }
If there is just one element named value, then the
name can be omitted, as in:
@SuppressWarnings("unchecked")
void myMethod() { ... }
If the annotation has no elements, then the
parentheses can be omitted, as shown in the
previous @Override example.
Já diretamente sobre a sua pergunta, os elementos das anotações são por padrão públicos e abstratos. Inclusive, uma coisa interessante e que demonstra que os elementos não são métodos é que eles podem ter valores padrão como é visto aqui.
@interface ClassPreamble {
String author();
String date();
int currentRevision() default 1;
String lastModified() default "N/A";
String lastModifiedBy() default "N/A";
// Note use of array
String[] reviewers();
}
Pegou a ideia? Qualquer coisa é só falar!
E o curso, o que está achando? Espero que esteja curtindo e aproveitando ao máximo o conteúdo!
Grande abraço e bons estudos, meu aluno!