Como faço para ler / compreender a seguinte declaração em Java?
Class<?>[] groups() default {};
Class < ? extends Payload>[] payload() default {};
Eu acho que eu posso entendê-los individualmente, mas eu não sei se eu ficar bom senso do que significa na sua totalidade.
Individualmente:
Class<?>
significa qualquer classe eClass< ? extends Payload>
qualquer classe, que se estende aPayload
classe[ ]
parece referir-se a qualquer variedade de classes. Isso está correto?groups()
epayload()
são nomes de métodos.default{}
Utilize esta opção quando não há nenhuma implementação?
Eu não sou realmente certo como entender as afirmações acima? qualquer ajuda seria muito bem vinda.
padrão {} -> Use isto quando não há nenhuma implementação?
Em uma definição de anotação você pode especificar um valor padrão para um parâmetro. O {}
padrão depois é um literal matriz para uma matriz vazia. Você também pode configurá-lo para algum valor não vazio. Isso também funciona para outros objetos também. por exemplo, a Data
anotação do Lombok, onde uma seqüência padrão é declarado:
public @interface Data {
String staticConstructor() default "";
}
Classe significa qualquer classe e "Class <? Estende Payload>" significa qualquer classe que estende a classe Payload
sim
[] -> parece referir-se a qualquer variedade de classes. Isso está correto?
sim
grupos () e a carga útil () são nomes de métodos.
Eles são o nome do parâmetro utilizado na declaração de anotação, bem como o nome dos métodos getter para esses valores. por exemplo, você pode definir:
@Data(staticConstructor = "of") class Foobar {}
E mais tarde você poderia obter o valor usando o método getter criados:
Data dataAnnotation = Foobar.class.getAnnotation(Data.class);
String staticConstructor = dataAnnotation.staticConstructor();
Nota que você não vai realmente ser capaz de recuperar o valor para uma anotação em tempo de execução, a menos que a definição anotação também é anotado com @Retention(RetentionPolicy.RUNTIME)